mirror of
https://github.com/Comfy-Org/ComfyUI-Manager.git
synced 2026-05-14 02:47:24 +08:00
Compare commits
21 Commits
7d46a5cb5c
...
f797621350
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f797621350 | ||
|
|
7a8fc44f90 | ||
|
|
8d5c12037f | ||
|
|
d370403e2d | ||
|
|
e67e35795e | ||
|
|
ccf6d98457 | ||
|
|
113324728e | ||
|
|
f2a3d39e26 | ||
|
|
ec72d983ad | ||
|
|
a3aabfd72c | ||
|
|
03272b1f70 | ||
|
|
66108ccdbc | ||
|
|
abf9c654b3 | ||
|
|
491f847bbc | ||
|
|
bbc223a76c | ||
|
|
aba857a350 | ||
|
|
74c2518894 | ||
|
|
98e0098ddd | ||
|
|
ed56212fa0 | ||
|
|
d4c4d53579 | ||
|
|
40afda065f |
@ -1,5 +1,25 @@
|
||||
{
|
||||
"custom_nodes": [
|
||||
{
|
||||
"author": "Carasibana",
|
||||
"title": "ComfyUI-SimpleFloatSlider",
|
||||
"reference": "https://github.com/Carasibana/ComfyUI-SimplayboyleFloatSlider",
|
||||
"files": [
|
||||
"https://github.com/Carasibana/ComfyUI-SimpleFloatSlider"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes providing styled draggable float slider widgets"
|
||||
},
|
||||
{
|
||||
"author": "18yz153",
|
||||
"title": "ComfyUI-Persona-Director",
|
||||
"reference": "https://github.com/c/ComfyUI-Persona-Director",
|
||||
"files": [
|
||||
"https://github.com/18yz153/ComfyUI-Persona-Director"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A visual state machine for consistent character generation. It intelligently maintains character identity, outfits, and locations across multiple generations using LLM-driven state management."
|
||||
},
|
||||
{
|
||||
"author": "Dr.Lt.Data",
|
||||
"title": "ComfyUI-Manager",
|
||||
@ -1685,6 +1705,17 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "15 productivity nodes: Kraken Unbound Prompt (vision-enabled prompt builder with Qwen2-VL), WAN Prompt Splitter (cinematic styling), Ollama Prompt Chat (LLM enhancement), LoRA Loader with CivitAI trigger fetching, Dual CLIP Loader (Flux/SD3/SDXL), smart KSampler (AMP handling for WAN/Flow/FP8), Empty Latent with aspect presets, Upscale & Tile Calculator for Ultimate SD Upscale, Resolution Helper, Image Processor, WAN Helper, and more."
|
||||
},
|
||||
{
|
||||
"author": "Kyreo",
|
||||
"title": "ComfyUI-CharacterPromptBuffer",
|
||||
"id": "comfyui-characterpromptbuffer",
|
||||
"reference": "https://github.com/Kyreo/ComfyUI-CharacterPromptBuffer",
|
||||
"files": [
|
||||
"https://github.com/Kyreo/ComfyUI-CharacterPromptBuffer"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes for generating multiple character prompt variations in a single queue run. Includes Character Prompt Manager and Variation Buffer."
|
||||
},
|
||||
{
|
||||
"author": "Gourieff",
|
||||
"title": "ComfyUI-FutureWarningIgnore",
|
||||
@ -3373,6 +3404,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes for SCAIL input processing"
|
||||
},
|
||||
{
|
||||
"author": "kijai",
|
||||
"title": "ComfyUI-NativeLooping_testing",
|
||||
"reference": "https://github.com/kijai/ComfyUI-NativeLooping_testing",
|
||||
"files": [
|
||||
"https://github.com/kijai/ComfyUI-NativeLooping_testing"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Temporary repository for testing candidate for native ComfyUI loop nodes. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "hhhzzyang",
|
||||
"title": "Comfyui-Lama",
|
||||
@ -6608,26 +6649,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Calculate the execution time of all nodes."
|
||||
},
|
||||
{
|
||||
"author": "Daniel Lewis",
|
||||
"title": "ComfyUI-Llama",
|
||||
"reference": "https://github.com/daniel-lewis-ab/ComfyUI-Llama",
|
||||
"files": [
|
||||
"https://github.com/daniel-lewis-ab/ComfyUI-Llama"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This is a set of nodes to interact with llama-cpp-python"
|
||||
},
|
||||
{
|
||||
"author": "Daniel Lewis",
|
||||
"title": "ComfyUI-TTS",
|
||||
"reference": "https://github.com/daniel-lewis-ab/ComfyUI-TTS",
|
||||
"files": [
|
||||
"https://github.com/daniel-lewis-ab/ComfyUI-TTS"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Text To Speech (TTS) for ComfyUI"
|
||||
},
|
||||
{
|
||||
"author": "djbielejeski",
|
||||
"title": "a-person-mask-generator",
|
||||
@ -13943,6 +13964,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A Matchering audio mastering/matching node for ComfyUI."
|
||||
},
|
||||
{
|
||||
"author": "marduk191",
|
||||
"title": "comfyui-nucleus",
|
||||
"reference": "https://github.com/marduk191/comfyui-nucleus",
|
||||
"files": [
|
||||
"https://github.com/marduk191/comfyui-nucleus"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nucleus Image (MoE diffusion) support for ComfyUI — backport of PR #13471"
|
||||
},
|
||||
{
|
||||
"author": "haohaocreates",
|
||||
"title": "ComfyUI-HH-Image-Selector",
|
||||
@ -28904,56 +28935,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Text translation node for ComfyUI: No need to apply for a translation API key, just use it. Currently supports more than thirty translation platforms."
|
||||
},
|
||||
{
|
||||
"author": "Charonartist",
|
||||
"title": "ComfyUI Auto LoRA",
|
||||
"reference": "https://github.com/Charonartist/comfyui-auto-lora-v2",
|
||||
"files": [
|
||||
"https://github.com/Charonartist/comfyui-auto-lora-v2"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This is a ComfyUI custom node that automatically detects trigger words from text prompts and applies the corresponding LoRA models."
|
||||
},
|
||||
{
|
||||
"author": "Charonartist",
|
||||
"title": "ComfyUI Smart Resize Node",
|
||||
"reference": "https://github.com/Charonartist/comfyui-smart-resize-node",
|
||||
"files": [
|
||||
"https://github.com/Charonartist/comfyui-smart-resize-node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Smart resize node for ComfyUI that handles portrait/landscape images with short/long side specification"
|
||||
},
|
||||
{
|
||||
"author": "Charonartist",
|
||||
"title": "ComfyUI Tag Remover",
|
||||
"reference": "https://github.com/Charonartist/comfyui-tag-remover",
|
||||
"files": [
|
||||
"https://github.com/Charonartist/comfyui-tag-remover"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node for removing specified tags and their content from text"
|
||||
},
|
||||
{
|
||||
"author": "Charonartist",
|
||||
"title": "comfyui-last-frame-extractor",
|
||||
"reference": "https://github.com/Charonartist/comfyui-last-frame-extractor",
|
||||
"files": [
|
||||
"https://github.com/Charonartist/comfyui-last-frame-extractor"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This is a ComfyUI custom node that extracts the last frame (image) from an input image batch. It is particularly useful when you want to obtain the final scene or frame in a video generation workflow."
|
||||
},
|
||||
{
|
||||
"author": "Charonartist",
|
||||
"title": "comfyui-lmstudio-conversation",
|
||||
"reference": "https://github.com/Charonartist/comfyui-lmstudio-conversation",
|
||||
"files": [
|
||||
"https://github.com/Charonartist/comfyui-lmstudio-conversation"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for LM Studio integration with conversation history support "
|
||||
},
|
||||
{
|
||||
"author": "ptmaster",
|
||||
"title": "ComfyUI-Load-Diffusion-Model-to-Muti-GPUs",
|
||||
@ -29554,16 +29535,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A wild collection of custom nodes for ComfyUI including noise schedulers, samplers, audio preview, latent visualizers, and more — built for maximal creative chaos."
|
||||
},
|
||||
{
|
||||
"author": "shiertier",
|
||||
"title": "ComfyUI-TeaCache-Lumina",
|
||||
"reference": "https://github.com/shiertier/ComfyUI-TeaCache-lumina2",
|
||||
"files": [
|
||||
"https://github.com/shiertier/ComfyUI-TeaCache-lumina2"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI Node Implementation: TeaCache Acceleration Specifically Designed for the Lumina Model"
|
||||
},
|
||||
{
|
||||
"author": "sjh00",
|
||||
"title": "ComfyUI LoadImageWithInfo",
|
||||
@ -30014,6 +29985,26 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes for FLUX.2 Klein conditioning: region-aware text enhancement, sectioned prompt encoding, and corrected reference-latent mixing with multi-reference support."
|
||||
},
|
||||
{
|
||||
"author": "xmarre",
|
||||
"title": "ComfyUI-DiffAid-Patches",
|
||||
"reference": "https://github.com/xmarre/ComfyUI-DiffAid-Patches",
|
||||
"files": [
|
||||
"https://github.com/xmarre/ComfyUI-DiffAid-Patches"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node pack implementing Diff-Aid-inspired inference-time text-conditioning patches for Flux and SDXL models."
|
||||
},
|
||||
{
|
||||
"author": "xmarre",
|
||||
"title": "ComfyUI-TIDE",
|
||||
"reference": "https://github.com/xmarre/ComfyUI-TIDE",
|
||||
"files": [
|
||||
"https://github.com/xmarre/ComfyUI-TIDE"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node implementing TIDE (Text-Informed Dynamic Extrapolation with Step-Aware Temperature Control) for diffusion models."
|
||||
},
|
||||
{
|
||||
"author": "Pigidiy",
|
||||
"title": "ComfyUI-LikeSpiderAI-UI",
|
||||
@ -30809,16 +30800,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for Telegram bot integration"
|
||||
},
|
||||
{
|
||||
"author": "leonardomiramondi",
|
||||
"title": "Flux Context ComfyUI Node",
|
||||
"reference": "https://github.com/leonardomiramondi/flux-context-comfyui",
|
||||
"files": [
|
||||
"https://github.com/leonardomiramondi/flux-context-comfyui"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI node for Flux Context (Kontext) image editing"
|
||||
},
|
||||
{
|
||||
"author": "kpsss34",
|
||||
"title": "ComfyUI kpsss34 Custom Node",
|
||||
@ -33750,6 +33731,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "This project is a custom node for ComfyUI that integrates the power of the Google Gemini 2.5 Flash Image (“Nano Banana”) API. It provides a single versatile node, the Gemini Nano Banana, which allows you to perform image generation and editing operations directly within your workflows."
|
||||
},
|
||||
{
|
||||
"author": "orion4d",
|
||||
"title": "Orion4D_AutoCachedPreview",
|
||||
"reference": "https://github.com/orion4d/Orion4D_AutoCachedPreview",
|
||||
"files": [
|
||||
"https://github.com/orion4d/Orion4D_AutoCachedPreview"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom node for ComfyUI that allows you to cache an image and its mask to avoid recalculating upstream steps in your workflow."
|
||||
},
|
||||
{
|
||||
"author": "Fabio Sarracino",
|
||||
"title": "VibeVoice ComfyUI",
|
||||
@ -37274,6 +37265,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Geekatplay Studio tiled generative upscale helpers for ComfyUI"
|
||||
},
|
||||
{
|
||||
"author": "GeekatplayStudio",
|
||||
"title": "ComfyUI-cluster",
|
||||
"reference": "https://github.com/GeekatplayStudio/ComfyUI-cluster",
|
||||
"files": [
|
||||
"https://github.com/GeekatplayStudio/ComfyUI-cluster"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Ollama-driven routing nodes and curated workflows for ComfyUI with checkpoint, LoRA, and Flux split-component flows plus image-guided variants using vision analysis."
|
||||
},
|
||||
{
|
||||
"author": "wouterverweirder",
|
||||
"title": "ComfyUI PenPlotter",
|
||||
@ -39189,16 +39190,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom ComfyUI node supporting wildcard text processing from files with YAML tags, randomization, latent ratio selection and preset aspect ratios."
|
||||
},
|
||||
{
|
||||
"author": "bpmpnaito",
|
||||
"title": "comfyui-imageviewer",
|
||||
"reference": "https://github.com/bpmpnaito/comfyui-imageviewer",
|
||||
"files": [
|
||||
"https://github.com/bpmpnaito/comfyui-imageviewer"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Image viewer node that displays preview of images directly in the node."
|
||||
},
|
||||
{
|
||||
"author": "ChangeTheConstants",
|
||||
"title": "SeedVarianceEnhancer",
|
||||
@ -41752,16 +41743,6 @@
|
||||
"description": "ComfyUI custom node for flexible image loading with file picker and random folder selection. Features instant preview, auto mode switching, and browser-based file selection.",
|
||||
"nodename_pattern": "RandomImagePicker"
|
||||
},
|
||||
{
|
||||
"author": "18yz153",
|
||||
"title": "ComfyUI-Persona-Director",
|
||||
"reference": "https://github.com/c/ComfyUI-Persona-Director",
|
||||
"files": [
|
||||
"https://github.com/18yz153/ComfyUI-Persona-Director"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A visual state machine for consistent character generation. It intelligently maintains character identity, outfits, and locations across multiple generations using LLM-driven state management."
|
||||
},
|
||||
{
|
||||
"author": "BWDrum",
|
||||
"title": "ComfyUI Random Wildcard Loader",
|
||||
@ -42374,6 +42355,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A collection of nodes that provide dynamic dropdown selectors for Samplers, Schedulers, Checkpoints, and Diffusion Models, outputting a comma-separated string for use in XY plots."
|
||||
},
|
||||
{
|
||||
"author": "DemonAlone",
|
||||
"title": "DemonAlone-StyleSelector-ComfyUI",
|
||||
"reference": "https://github.com/DemonAlone/DemonAlone-StyleSelector-ComfyUI",
|
||||
"files": [
|
||||
"https://github.com/DemonAlone/DemonAlone-StyleSelector-ComfyUI"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Prompt Style Selector with Preview, Multiple Selecting, Search and Local Base."
|
||||
},
|
||||
{
|
||||
"author": "tabisheva",
|
||||
"title": "comfyui-segs-profile",
|
||||
@ -45056,16 +45047,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Professional OpenColorIO / ACES color-management nodes for ComfyUI. Mirrors Nuke's OCIO node set with ACES 2.0, 1.3, and 1.2 support, EXR sequence loading, animated preview, and video export (MP4, WebP, GIF)."
|
||||
},
|
||||
{
|
||||
"author": "Carasibana",
|
||||
"title": "ComfyUI-SimpleFloatSlider",
|
||||
"reference": "https://github.com/Carasibana/ComfyUI-SimplayboyleFloatSlider",
|
||||
"files": [
|
||||
"https://github.com/Carasibana/ComfyUI-SimpleFloatSlider"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes providing styled draggable float slider widgets"
|
||||
},
|
||||
{
|
||||
"author": "Carasibana",
|
||||
"title": "ComfyUI-ResizeToCanvasSize",
|
||||
@ -45218,6 +45199,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A visual pill-based prompt composer node for ComfyUI. Features 4 prompt panels (Quality, Main, Aesthetic, Negative), tag browser, drag-to-reorder pills, weight control, presets, Lucky prompt generator, manual override mode, and wildcard (.yaml) file loader."
|
||||
},
|
||||
{
|
||||
"author": "cowneko",
|
||||
"title": "CWK_Checkpoints_Preset_Manager",
|
||||
"reference": "https://github.com/cowneko/CWK_Checkpoints_Preset_Manager",
|
||||
"files": [
|
||||
"https://github.com/cowneko/CWK_Checkpoints_Preset_Manager"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI node combining per-model preset system with full-featured model manager, CivitAI integration, and GGUF support for browsing and organizing checkpoints."
|
||||
},
|
||||
{
|
||||
"author": "dogodg3838",
|
||||
"title": "ComfyUI-NvEye",
|
||||
@ -45340,6 +45331,26 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI Qwen 3.5 Prompting nodes (captionate image, improve prompt, etc)"
|
||||
},
|
||||
{
|
||||
"author": "artemko7v",
|
||||
"title": "ComfyUI Prompt Enhance Nodes",
|
||||
"reference": "https://github.com/ArtemKo7v/ComfyUI-Prompt-Magic",
|
||||
"files": [
|
||||
"https://github.com/ArtemKo7v/ComfyUI-Prompt-Magic"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI prompt enhance nodes and string utilities"
|
||||
},
|
||||
{
|
||||
"author": "artemko7v",
|
||||
"title": "ComfyUI Complex Prompt Nodes",
|
||||
"reference": "https://github.com/ArtemKo7v/ComfyUI-Complex-Prompt",
|
||||
"files": [
|
||||
"https://github.com/ArtemKo7v/ComfyUI-Complex-Prompt"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI node for working with complex prompts with support for variables, randomness, and basic logic."
|
||||
},
|
||||
{
|
||||
"author": "TakkunRed",
|
||||
"title": "comfyui_checkpoint_preset_manager",
|
||||
@ -45474,6 +45485,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A floating preview window node for ComfyUI. Ideal for multi-monitor setups."
|
||||
},
|
||||
{
|
||||
"author": "nekodificador",
|
||||
"title": "NKD Klein Tools",
|
||||
"reference": "https://github.com/Nekodificador/ComfyUI-NKD-Klein-Tools",
|
||||
"files": [
|
||||
"https://github.com/Nekodificador/ComfyUI-NKD-Klein-Tools"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NKD Klein Presampling and Postsampling nodes for Flux Klein workflows in ComfyUI"
|
||||
},
|
||||
{
|
||||
"author": "IMGLAB-net",
|
||||
"title": "IMGLAB_ComfyUI",
|
||||
@ -45564,6 +45585,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Fork of ComfyUI-Inpaint-CropAndStitch adapted for Nano Banana 2. Adds NB2 Mask Generator, exact-resolution cropping and feathered alpha compositing in the stitch step."
|
||||
},
|
||||
{
|
||||
"author": "amortegui84",
|
||||
"title": "Tile Upscale NB2",
|
||||
"reference": "https://github.com/amortegui84/comfyui-tile-upscale-nb2",
|
||||
"files": [
|
||||
"https://github.com/amortegui84/comfyui-tile-upscale-nb2"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Tile-based upscaling nodes for ComfyUI — Nano Banana 2 compatible"
|
||||
},
|
||||
{
|
||||
"author": "hqrz",
|
||||
"title": "ComfyUI Japanese Romaji Converter",
|
||||
@ -46037,16 +46068,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Split a multiline prompt into up to 12 numbered STRING outputs using a user-defined delimiter. Useful for multi-segment video workflows."
|
||||
},
|
||||
{
|
||||
"author": "Kyreo",
|
||||
"title": "comfyui-characterpromptbuffer",
|
||||
"reference": "https://github.com/Kyreo/ComfyUI-CharacterPromptBuffer",
|
||||
"files": [
|
||||
"https://github.com/Kyreo/ComfyUI-CharacterPromptBuffer"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for generating character prompt variations as batch"
|
||||
},
|
||||
{
|
||||
"author": "Phykrex",
|
||||
"title": "comfyui-momo-nodes",
|
||||
@ -46077,6 +46098,296 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Personal ComfyUI custom nodes."
|
||||
},
|
||||
{
|
||||
"author": "wos-ai-studio",
|
||||
"title": "ComfyUI-Title-Memo",
|
||||
"reference": "https://github.com/xujianjian2004/ComfyUI-Title-Memo",
|
||||
"files": [
|
||||
"https://github.com/xujianjian2004/ComfyUI-Title-Memo"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Add title, comment and memo functions to nodes, which support custom styles and automatic word wrapping, compatible with Nodes 2.0."
|
||||
},
|
||||
{
|
||||
"author": "ussaaron",
|
||||
"title": "FrameFuse",
|
||||
"reference": "https://github.com/headline-design/comfyui-framefuse",
|
||||
"files": [
|
||||
"https://github.com/headline-design/comfyui-framefuse"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes for stitching a still frame onto the start or end of an IMAGE video batch and trimming extra tail frames with optional audio sync alignment."
|
||||
},
|
||||
{
|
||||
"author": "takkun",
|
||||
"title": "ComfyUI-StepByStep-Sampler",
|
||||
"reference": "https://github.com/TakkunRed/ComfyUI-StepByStep-Sampler",
|
||||
"files": [
|
||||
"https://github.com/TakkunRed/ComfyUI-StepByStep-Sampler"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI StepByStep Sampler is a plugin for ComfyUI that provides a step-by-step sampling method for image generation. It allows users to generate images in a more controlled and iterative manner, making it easier to achieve desired results."
|
||||
},
|
||||
{
|
||||
"author": "serhiiyashyn-sf",
|
||||
"title": "Face-Aligned Center",
|
||||
"reference": "https://github.com/serhiiyashyn-sf/comfyui-face-aligned-center",
|
||||
"files": [
|
||||
"https://github.com/serhiiyashyn-sf/comfyui-face-aligned-center"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Batch-aware character centering for ComfyUI. Given a character sheet (multiple angles), scales every image so the face ends up at the same size and canvas position — including back-view angles, via a silhouette fallback tied to the batch's face scale. Includes a Fine-Tune node for per-image zoom/nudge with a live canvas preview, and an Anime Face Detect node for crop+mask using lbpcascade_animeface."
|
||||
},
|
||||
{
|
||||
"author": "newgrit1004",
|
||||
"title": "Qwen3 Triton TTS",
|
||||
"reference": "https://github.com/newgrit1004/ComfyUI-Qwen3-TTS-Triton",
|
||||
"files": [
|
||||
"https://github.com/newgrit1004/ComfyUI-Qwen3-TTS-Triton"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI node wrapping qwen3-tts-triton for 7-mode Qwen3-TTS inference (Triton kernel fusion + TurboQuant KV cache)"
|
||||
},
|
||||
{
|
||||
"author": "mahilkr",
|
||||
"title": "HunyuanWorld 3D World Generation",
|
||||
"reference": "https://github.com/krmahil/comfyui-hunyuan-world",
|
||||
"files": [
|
||||
"https://github.com/krmahil/comfyui-hunyuan-world"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for immersive 3D world generation using Tencent HunyuanWorld 1.0"
|
||||
},
|
||||
{
|
||||
"author": "machinedelusions",
|
||||
"title": "ComfyUI-FL-LTXTools",
|
||||
"reference": "https://github.com/filliptm/ComfyUI-FL-LTXTools",
|
||||
"files": [
|
||||
"https://github.com/filliptm/ComfyUI-FL-LTXTools"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Experimental tools and motion controls for LTX-Video in ComfyUI"
|
||||
},
|
||||
{
|
||||
"author": "intelliprompt",
|
||||
"title": "comfy-intelliprompt",
|
||||
"reference": "https://github.com/galpt/comfy-intelliPrompt",
|
||||
"files": [
|
||||
"https://github.com/galpt/comfy-intelliPrompt"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "intelliPrompt - An intelligent prompt optimizer for ComfyUI that fixes typos, balances parentheses, and enhances prompts"
|
||||
},
|
||||
{
|
||||
"author": "enviral-design",
|
||||
"title": "Enviral Design Node Pack",
|
||||
"reference": "https://github.com/EnviralDesign/comfyUI-enviral-design-node-pack",
|
||||
"files": [
|
||||
"https://github.com/EnviralDesign/comfyUI-enviral-design-node-pack"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Small, dependency-light ComfyUI utility nodes from Enviral Design."
|
||||
},
|
||||
{
|
||||
"author": "eniewold",
|
||||
"title": "Subworkflow (reusable workflows)",
|
||||
"reference": "https://github.com/eniewold/ComfyUI-Subworkflow",
|
||||
"files": [
|
||||
"https://github.com/eniewold/ComfyUI-Subworkflow"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Use ComfyUI workflows as reusable subworkflows via Subworkflow Input, Subworkflow Output, and Subworkflow nodes"
|
||||
},
|
||||
{
|
||||
"author": "dorpxam",
|
||||
"title": "LTX-2 Microscope",
|
||||
"reference": "https://github.com/dorpxam/ComfyUI-LTX2-Microscope",
|
||||
"files": [
|
||||
"https://github.com/dorpxam/ComfyUI-LTX2-Microscope"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "48-Layers Latent Previewer for Lightrick's LTX-2 model."
|
||||
},
|
||||
{
|
||||
"author": "dailydoseofaiart",
|
||||
"title": "ComfyUI-FPSFrameDrop",
|
||||
"reference": "https://github.com/dailydoseofaiart/ComfyUI-FPSFrameDrop",
|
||||
"files": [
|
||||
"https://github.com/dailydoseofaiart/ComfyUI-FPSFrameDrop"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A node to drop frames from the output images to force the video to a lower FPS at the same playback speed."
|
||||
},
|
||||
{
|
||||
"author": "Emiewn",
|
||||
"title": "ComfyUI-Emiewn-Nodes",
|
||||
"reference": "https://github.com/emiewnn/ComfyUI-Emiewn-Nodes",
|
||||
"files": [
|
||||
"https://github.com/emiewnn/ComfyUI-Emiewn-Nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom nodes for ComfyUI: Drag & drop image paste, interactive UI crop, WAN I2V bucket resolution, and GIMM-VFI frame interpolation."
|
||||
},
|
||||
{
|
||||
"author": "jetthuangai",
|
||||
"title": "ComfyUI-JH-PixelPro",
|
||||
"reference": "https://github.com/jetthuangai/ComfyUI-JH-PixelPro",
|
||||
"files": [
|
||||
"https://github.com/jetthuangai/ComfyUI-JH-PixelPro"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "GPU-powered pro-grade image suite cho retouch chân dung. v0.1.0 alpha: Frequency Separation (N-01) + Sub-Pixel Mask Refiner (N-02). Kornia core, tensor thuần không rời VRAM."
|
||||
},
|
||||
{
|
||||
"author": "xxchinenxx",
|
||||
"title": "Qwen Clothing Selector",
|
||||
"reference": "https://github.com/xxchinenxx/ComfyUI-QwenClothingSelector",
|
||||
"files": [
|
||||
"https://github.com/xxchinenxx/ComfyUI-QwenClothingSelector"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for Qwen-Image-Edit outfit/clothing edits — toggles, presets, and identity-preserving prompt builders. Useful for fashion edits, costume changes, and outfit swaps."
|
||||
},
|
||||
{
|
||||
"author": "xav",
|
||||
"title": "XAV Anima Style Selector",
|
||||
"reference": "https://github.com/XAV-Games/comfyui-xav-anima-style-selector",
|
||||
"files": [
|
||||
"https://github.com/XAV-Games/comfyui-xav-anima-style-selector"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes for quick and easy style selection for the Anima model"
|
||||
},
|
||||
{
|
||||
"author": "wsq194",
|
||||
"title": "Yeban Workflow Manager",
|
||||
"reference": "https://github.com/wsq194/yeban-workflow-manager",
|
||||
"files": [
|
||||
"https://github.com/wsq194/yeban-workflow-manager"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI workflow manager plugin with auto-save, version history, sidebar integration and more."
|
||||
},
|
||||
{
|
||||
"author": "szymonj",
|
||||
"title": "LoRA Range Loader",
|
||||
"reference": "https://github.com/esp-dev/comfyui-lora-range-loader",
|
||||
"files": [
|
||||
"https://github.com/esp-dev/comfyui-lora-range-loader"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node: load a LoRA from current selection and automatically advance current within a first/last filename range."
|
||||
},
|
||||
{
|
||||
"author": "mitch-avis",
|
||||
"title": "ComfyUI-HoldCounter",
|
||||
"reference": "https://github.com/mitch-avis/ComfyUI-HoldCounter",
|
||||
"files": [
|
||||
"https://github.com/mitch-avis/ComfyUI-HoldCounter"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node that emits a held, range-bound integer index with multiple advancement modes (loop, clamp, pingpong, random, shuffle) — useful as a Load Image batch index that advances every N runs."
|
||||
},
|
||||
{
|
||||
"author": "halr9000",
|
||||
"title": "Procgen 9000",
|
||||
"reference": "https://github.com/halr9000/procgen9000",
|
||||
"files": [
|
||||
"https://github.com/halr9000/procgen9000"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Procedural image generation toolkit designed as input to image edit workflows."
|
||||
},
|
||||
{
|
||||
"author": "capacap",
|
||||
"title": "ComfyUI-Selective-Sigma-Detailer",
|
||||
"reference": "https://github.com/Capacap/ComfyUI-Selective-Sigma-Detailer",
|
||||
"files": [
|
||||
"https://github.com/Capacap/ComfyUI-Selective-Sigma-Detailer"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI sampler that boosts detail only in latent regions that are already dense at the moment the schedule activates."
|
||||
},
|
||||
{
|
||||
"author": "brosequist",
|
||||
"title": "comfyui-pipeline-barrier",
|
||||
"reference": "https://github.com/brosequist/ComfyUI-PipelineBarrier",
|
||||
"files": [
|
||||
"https://github.com/brosequist/ComfyUI-PipelineBarrier"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI node that force-flushes GPU caches between pipeline stages to prevent OOM kills"
|
||||
},
|
||||
{
|
||||
"author": "amrnidal999-tech",
|
||||
"title": "Realisim Enhancor",
|
||||
"reference": "https://github.com/amrnidal999-tech/comfyui-realisim-enhancor",
|
||||
"files": [
|
||||
"https://github.com/amrnidal999-tech/comfyui-realisim-enhancor"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI image enhancement node with JPEG degradation, noise, blur, sharpening, contrast, and color controls."
|
||||
},
|
||||
{
|
||||
"author": "rikanrino",
|
||||
"title": "Rikannodes",
|
||||
"reference": "https://github.com/rikanrino/Rikannodes",
|
||||
"files": [
|
||||
"https://github.com/rikanrino/Rikannodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "kijai ComfyUI-PromptRelay with fps and max frame output"
|
||||
},
|
||||
{
|
||||
"author": "mexxmillion",
|
||||
"title": "ComfyUI-VLMPrompt",
|
||||
"reference": "https://github.com/mexxmillion/ComfyUI-VLMPrompt",
|
||||
"files": [
|
||||
"https://github.com/mexxmillion/ComfyUI-VLMPrompt"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for local VLM prompt generation with GGUF and Hugging Face backends."
|
||||
},
|
||||
{
|
||||
"author": "IA-gyz",
|
||||
"title": "comfyui-VarBoard",
|
||||
"reference": "https://github.com/IA-gyz/comfyui-VarBoard",
|
||||
"files": [
|
||||
"https://github.com/IA-gyz/comfyui-VarBoard"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Variables Board is a floating control center for ComfyUI workflows that centralizes parameters into a customizable overlay."
|
||||
},
|
||||
{
|
||||
"author": "hassan-mb",
|
||||
"title": "HB ComfyUI Nodes",
|
||||
"reference": "https://github.com/HassanEclipse/comfyui-hb-party",
|
||||
"files": [
|
||||
"https://github.com/HassanEclipse/comfyui-hb-party"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Utility nodes for ComfyUI featuring a dynamic Text Preset Switch with workflow-safe persistence and Node 2.0 support."
|
||||
},
|
||||
{
|
||||
"author": "Cordux",
|
||||
"title": "ComfyUI-PromptTagBuilder",
|
||||
"reference": "https://github.com/Cordux/ComfyUI-PromptTagBuilder",
|
||||
"files": [
|
||||
"https://github.com/Cordux/ComfyUI-PromptTagBuilder"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Flexible ComfyUI node that simplifies prompt building through organized dropdown categories for tag-based models."
|
||||
},
|
||||
{
|
||||
"author": "alikonfilms",
|
||||
"title": "comfyui-alikonfilms",
|
||||
"reference": "https://github.com/alikonfilms/comfyui_alikonfilms",
|
||||
"files": [
|
||||
"https://github.com/alikonfilms/comfyui_alikonfilms"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A CLIP text encoder with 18 cinematic camera movement presets (dolly, pan, tilt, zoom, orbit and more). Subject-aware and free-camera modes, blend slider to mix your prompt with camera movements, and a live text output to preview the final prompt."
|
||||
},
|
||||
|
||||
|
||||
|
||||
@ -46457,6 +46768,17 @@
|
||||
"install_type": "unzip",
|
||||
"description": "Various image processing nodes."
|
||||
},
|
||||
{
|
||||
"author": "CX330V",
|
||||
"title": "Qwen-Image-Toolkit",
|
||||
"id": "Cx330",
|
||||
"reference": "https://github.com/CX330V/Qwen-Image-Toolkit",
|
||||
"files": [
|
||||
"https://github.com/CX330V/Qwen-Image-Toolkit"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A toolkit for Qwen-Image, including a specialized LoRA loader, prompt styler, and aspect ratio presets. Enables seamless integration of Qwen-Image LoRAs within ComfyUI.",
|
||||
},
|
||||
{
|
||||
"author": "aimingfail",
|
||||
"title": "Image2Halftone Node for ComfyUI",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
11537
github-stats.json
11537
github-stats.json
File diff suppressed because it is too large
Load Diff
@ -44,7 +44,7 @@ import manager_migration
|
||||
from node_package import InstalledNodePackage
|
||||
|
||||
|
||||
version_code = [3, 39, 2]
|
||||
version_code = [3, 40]
|
||||
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
|
||||
|
||||
|
||||
|
||||
@ -312,6 +312,57 @@ def security_403_response():
|
||||
return web.json_response({"error": "security_level"}, status=403)
|
||||
|
||||
|
||||
# CORS "simple request" Content-Type set per Fetch spec §3.2.3. Browsers send
|
||||
# <form method=POST> submissions with one of these three MIME types and do NOT
|
||||
# trigger a CORS preflight, so a malicious cross-origin page can silently POST
|
||||
# into state-changing endpoints if we only gate on HTTP method. Blocking these
|
||||
# three Content-Types on no-body mutation endpoints forces any non-same-origin
|
||||
# POST to use a non-simple Content-Type (e.g. application/json), which triggers
|
||||
# a preflight that this server rejects by not advertising an Access-Control-
|
||||
# Allow-Origin response.
|
||||
_SIMPLE_FORM_CONTENT_TYPES = frozenset({
|
||||
'application/x-www-form-urlencoded',
|
||||
'multipart/form-data',
|
||||
'text/plain',
|
||||
})
|
||||
|
||||
|
||||
def _reject_simple_form_content_type(request):
|
||||
"""Reject Content-Types that enable preflight-less <form method=POST> CSRF.
|
||||
|
||||
Applied ONLY to POST handlers that do not consume a request body (e.g.,
|
||||
/snapshot/save, /manager/queue/{reset,start,update_comfyui},
|
||||
/manager/reboot). These are vulnerable to cross-origin <form method=POST>
|
||||
attacks because the handler accepts the request without parsing any body —
|
||||
the attacker needs no ability to forge a valid payload, only to point a
|
||||
hidden form at the URL.
|
||||
|
||||
Handlers that already read a body via ``await request.json()`` are NOT
|
||||
gated here: a cross-origin <form method=POST> cannot forge a valid JSON
|
||||
body because the browser refuses to send ``application/json`` without a
|
||||
CORS preflight, which this server does not answer.
|
||||
|
||||
DO NOT add this gate to body-reading handlers — redundant and UX-breaking.
|
||||
DO NOT remove this gate from no-body handlers — this is the bypass vector.
|
||||
|
||||
aiohttp's ``request.content_type`` normalizes the header (lower-cases,
|
||||
strips parameters), so ``multipart/form-data; boundary=----X`` is compared
|
||||
as ``multipart/form-data``.
|
||||
|
||||
Returns:
|
||||
web.Response(status=400) when the request has a simple-form
|
||||
Content-Type that must be rejected. None when the request is allowed
|
||||
to proceed (no Content-Type, application/json, or any non-simple
|
||||
Content-Type).
|
||||
"""
|
||||
if request.content_type in _SIMPLE_FORM_CONTENT_TYPES:
|
||||
return web.Response(
|
||||
status=400,
|
||||
text='Invalid Content-Type for this endpoint. Use application/json or omit body.',
|
||||
)
|
||||
return None
|
||||
|
||||
|
||||
def get_model_dir(data, show_log=False):
|
||||
if 'download_model_base' in folder_paths.folder_names_and_paths:
|
||||
models_base = folder_paths.folder_names_and_paths['download_model_base'][0][0]
|
||||
@ -737,16 +788,19 @@ async def fetch_customnode_mappings(request):
|
||||
return web.json_response(json_obj, content_type='application/json')
|
||||
|
||||
|
||||
@routes.get("/customnode/fetch_updates")
|
||||
@routes.post("/customnode/fetch_updates")
|
||||
async def fetch_updates(request):
|
||||
try:
|
||||
if request.rel_url.query["mode"] == "local":
|
||||
json_data = await request.json()
|
||||
mode = json_data.get("mode", "default")
|
||||
|
||||
if mode == "local":
|
||||
channel = 'local'
|
||||
else:
|
||||
channel = core.get_config()['channel_url']
|
||||
|
||||
await core.unified_manager.reload(request.rel_url.query["mode"])
|
||||
await core.unified_manager.get_custom_nodes(channel, request.rel_url.query["mode"])
|
||||
await core.unified_manager.reload(mode)
|
||||
await core.unified_manager.get_custom_nodes(channel, mode)
|
||||
|
||||
res = core.unified_manager.fetch_or_pull_git_repo(is_pull=False)
|
||||
|
||||
@ -764,7 +818,7 @@ async def fetch_updates(request):
|
||||
return web.Response(status=400)
|
||||
|
||||
|
||||
@routes.get("/manager/queue/update_all")
|
||||
@routes.post("/manager/queue/update_all")
|
||||
async def update_all(request):
|
||||
if not is_allowed_security_level('middle'):
|
||||
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
|
||||
@ -774,16 +828,19 @@ async def update_all(request):
|
||||
is_processing = task_worker_thread is not None and task_worker_thread.is_alive()
|
||||
if is_processing:
|
||||
return web.Response(status=401)
|
||||
|
||||
|
||||
await core.save_snapshot_with_postfix('autosave')
|
||||
|
||||
if request.rel_url.query["mode"] == "local":
|
||||
json_data = await request.json()
|
||||
mode = json_data.get("mode", "default")
|
||||
|
||||
if mode == "local":
|
||||
channel = 'local'
|
||||
else:
|
||||
channel = core.get_config()['channel_url']
|
||||
|
||||
await core.unified_manager.reload(request.rel_url.query["mode"])
|
||||
await core.unified_manager.get_custom_nodes(channel, request.rel_url.query["mode"])
|
||||
await core.unified_manager.reload(mode)
|
||||
await core.unified_manager.get_custom_nodes(channel, mode)
|
||||
|
||||
for k, v in core.unified_manager.active_nodes.items():
|
||||
if k == 'comfyui-manager':
|
||||
@ -1006,14 +1063,15 @@ def get_safe_snapshot_path(target):
|
||||
return os.path.join(core.manager_snapshot_path, f"{target}.json")
|
||||
|
||||
|
||||
@routes.get("/snapshot/remove")
|
||||
@routes.post("/snapshot/remove")
|
||||
async def remove_snapshot(request):
|
||||
if not is_allowed_security_level('middle'):
|
||||
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
|
||||
return security_403_response()
|
||||
|
||||
try:
|
||||
target = request.rel_url.query["target"]
|
||||
json_data = await request.json()
|
||||
target = json_data["target"]
|
||||
path = get_safe_snapshot_path(target)
|
||||
|
||||
if path is None:
|
||||
@ -1028,14 +1086,15 @@ async def remove_snapshot(request):
|
||||
return web.Response(status=400)
|
||||
|
||||
|
||||
@routes.get("/snapshot/restore")
|
||||
@routes.post("/snapshot/restore")
|
||||
async def restore_snapshot(request):
|
||||
if not is_allowed_security_level('middle'):
|
||||
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
|
||||
return security_403_response()
|
||||
|
||||
try:
|
||||
target = request.rel_url.query["target"]
|
||||
json_data = await request.json()
|
||||
target = json_data["target"]
|
||||
path = get_safe_snapshot_path(target)
|
||||
|
||||
if path is None:
|
||||
@ -1066,8 +1125,11 @@ async def get_current_snapshot_api(request):
|
||||
return web.Response(status=400)
|
||||
|
||||
|
||||
@routes.get("/snapshot/save")
|
||||
@routes.post("/snapshot/save")
|
||||
async def save_snapshot(request):
|
||||
resp = _reject_simple_form_content_type(request)
|
||||
if resp is not None:
|
||||
return resp
|
||||
try:
|
||||
await core.save_snapshot_with_postfix('snapshot')
|
||||
return web.Response(status=200)
|
||||
@ -1228,8 +1290,11 @@ async def reinstall_custom_node(request):
|
||||
await install_custom_node(request)
|
||||
|
||||
|
||||
@routes.get("/manager/queue/reset")
|
||||
@routes.post("/manager/queue/reset")
|
||||
async def reset_queue(request):
|
||||
resp = _reject_simple_form_content_type(request)
|
||||
if resp is not None:
|
||||
return resp
|
||||
global task_queue
|
||||
task_queue = queue.Queue()
|
||||
return web.Response(status=200)
|
||||
@ -1270,6 +1335,26 @@ async def install_custom_node(request):
|
||||
if skip_post_install:
|
||||
if cnr_id in core.unified_manager.nightly_inactive_nodes or cnr_id in core.unified_manager.cnr_inactive_nodes:
|
||||
core.unified_manager.unified_enable(cnr_id)
|
||||
# Mirror the pair of events (in_progress then done) that the async
|
||||
# task_worker normally emits for queued operations. The in_progress
|
||||
# event is what sets item.restart=true on the client row so the
|
||||
# action cell re-renders as "Restart Required"; without it, the
|
||||
# "Enable" button remains visible after successful enable. The done
|
||||
# event drives the completion UI (toast, restart indicator, button
|
||||
# loading clear).
|
||||
ui_id = json_data.get('ui_id', cnr_id)
|
||||
PromptServer.instance.send_sync(
|
||||
"cm-queue-status",
|
||||
{'status': 'in_progress',
|
||||
'target': ui_id,
|
||||
'ui_target': 'nodepack_manager',
|
||||
'total_count': 1, 'done_count': 0})
|
||||
PromptServer.instance.send_sync(
|
||||
"cm-queue-status",
|
||||
{'status': 'done',
|
||||
'nodepack_result': {ui_id: 'success'},
|
||||
'model_result': {},
|
||||
'total_count': 1, 'done_count': 1})
|
||||
return web.Response(status=200)
|
||||
elif selected_version is None:
|
||||
selected_version = 'latest'
|
||||
@ -1311,8 +1396,11 @@ async def install_custom_node(request):
|
||||
|
||||
task_worker_thread:threading.Thread = None
|
||||
|
||||
@routes.get("/manager/queue/start")
|
||||
@routes.post("/manager/queue/start")
|
||||
async def queue_start(request):
|
||||
resp = _reject_simple_form_content_type(request)
|
||||
if resp is not None:
|
||||
return resp
|
||||
global nodepack_result
|
||||
global model_result
|
||||
global task_worker_thread
|
||||
@ -1427,8 +1515,11 @@ async def update_custom_node(request):
|
||||
return web.Response(status=200)
|
||||
|
||||
|
||||
@routes.get("/manager/queue/update_comfyui")
|
||||
@routes.post("/manager/queue/update_comfyui")
|
||||
async def update_comfyui(request):
|
||||
resp = _reject_simple_form_content_type(request)
|
||||
if resp is not None:
|
||||
return resp
|
||||
is_stable = core.get_config()['update_policy'] != 'nightly-comfyui'
|
||||
task_queue.put(("update-comfyui", ('comfyui', is_stable)))
|
||||
return web.Response(status=200)
|
||||
@ -1445,11 +1536,12 @@ async def comfyui_versions(request):
|
||||
return web.Response(status=400)
|
||||
|
||||
|
||||
@routes.get("/comfyui_manager/comfyui_switch_version")
|
||||
@routes.post("/comfyui_manager/comfyui_switch_version")
|
||||
async def comfyui_switch_version(request):
|
||||
try:
|
||||
if "ver" in request.rel_url.query:
|
||||
core.switch_comfyui(request.rel_url.query['ver'])
|
||||
json_data = await request.json()
|
||||
if "ver" in json_data:
|
||||
core.switch_comfyui(json_data['ver'])
|
||||
|
||||
return web.Response(status=200)
|
||||
except Exception as e:
|
||||
@ -1526,83 +1618,87 @@ async def install_model(request):
|
||||
|
||||
|
||||
@routes.get("/manager/preview_method")
|
||||
async def preview_method(request):
|
||||
# Setting change request
|
||||
if "value" in request.rel_url.query:
|
||||
# Reject setting change if per-queue preview feature is available
|
||||
if COMFYUI_HAS_PER_QUEUE_PREVIEW:
|
||||
return web.Response(text="DISABLED", status=403)
|
||||
async def get_preview_method(request):
|
||||
if COMFYUI_HAS_PER_QUEUE_PREVIEW:
|
||||
return web.Response(text="DISABLED", status=200)
|
||||
return web.Response(text=core.manager_funcs.get_current_preview_method(), status=200)
|
||||
|
||||
# Process normally if not available
|
||||
set_preview_method(request.rel_url.query['value'])
|
||||
core.write_config()
|
||||
return web.Response(status=200)
|
||||
|
||||
# Status query request
|
||||
else:
|
||||
# Return DISABLED if per-queue preview feature is available
|
||||
if COMFYUI_HAS_PER_QUEUE_PREVIEW:
|
||||
return web.Response(text="DISABLED", status=200)
|
||||
@routes.post("/manager/preview_method")
|
||||
async def set_preview_method_handler(request):
|
||||
if COMFYUI_HAS_PER_QUEUE_PREVIEW:
|
||||
return web.Response(text="DISABLED", status=403)
|
||||
|
||||
# Return current value if not available
|
||||
return web.Response(text=core.manager_funcs.get_current_preview_method(), status=200)
|
||||
json_data = await request.json()
|
||||
set_preview_method(json_data['value'])
|
||||
core.write_config()
|
||||
return web.Response(status=200)
|
||||
|
||||
|
||||
@routes.get("/manager/db_mode")
|
||||
async def db_mode(request):
|
||||
if "value" in request.rel_url.query:
|
||||
set_db_mode(request.rel_url.query['value'])
|
||||
core.write_config()
|
||||
else:
|
||||
return web.Response(text=core.get_config()['db_mode'], status=200)
|
||||
async def get_db_mode(request):
|
||||
return web.Response(text=core.get_config()['db_mode'], status=200)
|
||||
|
||||
|
||||
@routes.post("/manager/db_mode")
|
||||
async def set_db_mode_handler(request):
|
||||
json_data = await request.json()
|
||||
set_db_mode(json_data['value'])
|
||||
core.write_config()
|
||||
return web.Response(status=200)
|
||||
|
||||
|
||||
|
||||
@routes.get("/manager/policy/component")
|
||||
async def component_policy(request):
|
||||
if "value" in request.rel_url.query:
|
||||
set_component_policy(request.rel_url.query['value'])
|
||||
core.write_config()
|
||||
else:
|
||||
return web.Response(text=core.get_config()['component_policy'], status=200)
|
||||
async def get_component_policy(request):
|
||||
return web.Response(text=core.get_config()['component_policy'], status=200)
|
||||
|
||||
|
||||
@routes.post("/manager/policy/component")
|
||||
async def set_component_policy_handler(request):
|
||||
json_data = await request.json()
|
||||
set_component_policy(json_data['value'])
|
||||
core.write_config()
|
||||
return web.Response(status=200)
|
||||
|
||||
|
||||
@routes.get("/manager/policy/update")
|
||||
async def update_policy(request):
|
||||
if "value" in request.rel_url.query:
|
||||
set_update_policy(request.rel_url.query['value'])
|
||||
core.write_config()
|
||||
else:
|
||||
return web.Response(text=core.get_config()['update_policy'], status=200)
|
||||
async def get_update_policy(request):
|
||||
return web.Response(text=core.get_config()['update_policy'], status=200)
|
||||
|
||||
|
||||
@routes.post("/manager/policy/update")
|
||||
async def set_update_policy_handler(request):
|
||||
json_data = await request.json()
|
||||
set_update_policy(json_data['value'])
|
||||
core.write_config()
|
||||
return web.Response(status=200)
|
||||
|
||||
|
||||
@routes.get("/manager/channel_url_list")
|
||||
async def channel_url_list(request):
|
||||
async def get_channel_url_list(request):
|
||||
channels = core.get_channel_dict()
|
||||
if "value" in request.rel_url.query:
|
||||
channel_url = channels.get(request.rel_url.query['value'])
|
||||
if channel_url is not None:
|
||||
core.get_config()['channel_url'] = channel_url
|
||||
core.write_config()
|
||||
else:
|
||||
selected = 'custom'
|
||||
selected_url = core.get_config()['channel_url']
|
||||
selected = 'custom'
|
||||
selected_url = core.get_config()['channel_url']
|
||||
|
||||
for name, url in channels.items():
|
||||
if url == selected_url:
|
||||
selected = name
|
||||
break
|
||||
for name, url in channels.items():
|
||||
if url == selected_url:
|
||||
selected = name
|
||||
break
|
||||
|
||||
res = {'selected': selected,
|
||||
'list': core.get_channel_list()}
|
||||
return web.json_response(res, status=200)
|
||||
res = {'selected': selected,
|
||||
'list': core.get_channel_list()}
|
||||
return web.json_response(res, status=200)
|
||||
|
||||
|
||||
@routes.post("/manager/channel_url_list")
|
||||
async def set_channel_url_list(request):
|
||||
json_data = await request.json()
|
||||
channels = core.get_channel_dict()
|
||||
channel_url = channels.get(json_data['value'])
|
||||
if channel_url is not None:
|
||||
core.get_config()['channel_url'] = channel_url
|
||||
core.write_config()
|
||||
return web.Response(status=200)
|
||||
|
||||
|
||||
@ -1700,8 +1796,11 @@ async def get_startup_alerts(request):
|
||||
return web.json_response(alerts)
|
||||
|
||||
|
||||
@routes.get("/manager/reboot")
|
||||
@routes.post("/manager/reboot")
|
||||
def restart(self):
|
||||
resp = _reject_simple_form_content_type(self)
|
||||
if resp is not None:
|
||||
return resp
|
||||
if not is_allowed_security_level('middle'):
|
||||
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
|
||||
return security_403_response()
|
||||
|
||||
@ -52,7 +52,7 @@ async function tryInstallCustomNode(event) {
|
||||
}
|
||||
}
|
||||
|
||||
let response = await api.fetchApi("/manager/reboot");
|
||||
let response = await api.fetchApi("/manager/reboot", { method: 'POST' });
|
||||
if(response.status == 403) {
|
||||
await handle403Response(response);
|
||||
return false;
|
||||
|
||||
@ -470,12 +470,12 @@ async function updateComfyUI() {
|
||||
|
||||
set_inprogress_mode();
|
||||
|
||||
const response = await api.fetchApi('/manager/queue/update_comfyui');
|
||||
const response = await api.fetchApi('/manager/queue/update_comfyui', { method: 'POST' });
|
||||
|
||||
showTerminal();
|
||||
|
||||
is_updating = true;
|
||||
await api.fetchApi('/manager/queue/start');
|
||||
await api.fetchApi('/manager/queue/start', { method: 'POST' });
|
||||
}
|
||||
|
||||
function showVersionSelectorDialog(versions, current, onSelect) {
|
||||
@ -625,14 +625,14 @@ async function switchComfyUI() {
|
||||
showVersionSelectorDialog(versions, obj.current, async (selected_version) => {
|
||||
if(selected_version == 'nightly') {
|
||||
update_policy_combo.value = 'nightly-comfyui';
|
||||
api.fetchApi('/manager/policy/update?value=nightly-comfyui');
|
||||
api.fetchApi('/manager/policy/update', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ value: 'nightly-comfyui' }) });
|
||||
}
|
||||
else {
|
||||
update_policy_combo.value = 'stable-comfyui';
|
||||
api.fetchApi('/manager/policy/update?value=stable-comfyui');
|
||||
api.fetchApi('/manager/policy/update', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ value: 'stable-comfyui' }) });
|
||||
}
|
||||
|
||||
let response = await api.fetchApi(`/comfyui_manager/comfyui_switch_version?ver=${selected_version}`, { cache: "no-store" });
|
||||
let response = await api.fetchApi('/comfyui_manager/comfyui_switch_version', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ver: selected_version }), cache: "no-store" });
|
||||
if (response.status == 200) {
|
||||
infoToast(`ComfyUI version is switched to ${selected_version}`);
|
||||
}
|
||||
@ -769,10 +769,10 @@ async function updateAll(update_comfyui) {
|
||||
|
||||
if(update_comfyui) {
|
||||
update_all_button.innerText = "Updating ComfyUI...";
|
||||
await api.fetchApi('/manager/queue/update_comfyui');
|
||||
await api.fetchApi('/manager/queue/update_comfyui', { method: 'POST' });
|
||||
}
|
||||
|
||||
const response = await api.fetchApi(`/manager/queue/update_all?mode=${mode}`);
|
||||
const response = await api.fetchApi('/manager/queue/update_all', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ mode: mode }) });
|
||||
|
||||
if (response.status == 403) {
|
||||
await handle403Response(response);
|
||||
@ -784,7 +784,7 @@ async function updateAll(update_comfyui) {
|
||||
}
|
||||
else if(response.status == 200) {
|
||||
is_updating = true;
|
||||
await api.fetchApi('/manager/queue/start');
|
||||
await api.fetchApi('/manager/queue/start', { method: 'POST' });
|
||||
}
|
||||
}
|
||||
|
||||
@ -813,7 +813,7 @@ function restartOrStop() {
|
||||
rebootAPI();
|
||||
}
|
||||
else {
|
||||
api.fetchApi('/manager/queue/reset');
|
||||
api.fetchApi('/manager/queue/reset', { method: 'POST' });
|
||||
infoToast('Cancel', 'Remaining tasks will stop after completing the current task.');
|
||||
}
|
||||
}
|
||||
@ -967,7 +967,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
.then(data => { this.datasrc_combo.value = data; });
|
||||
|
||||
this.datasrc_combo.addEventListener('change', function (event) {
|
||||
api.fetchApi(`/manager/db_mode?value=${event.target.value}`);
|
||||
api.fetchApi('/manager/db_mode', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ value: event.target.value }) });
|
||||
});
|
||||
|
||||
const dbRetrievalSetttingItem = createSettingsCombo("DB", this.datasrc_combo);
|
||||
@ -1043,7 +1043,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
|
||||
// Normal operation
|
||||
api.fetchApi(`/manager/preview_method?value=${event.target.value}`)
|
||||
api.fetchApi('/manager/preview_method', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ value: event.target.value }) })
|
||||
.then(response => {
|
||||
if (response.status === 403) {
|
||||
// Feature transitioned to native
|
||||
@ -1087,7 +1087,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
|
||||
channel_combo.addEventListener('change', function (event) {
|
||||
api.fetchApi(`/manager/channel_url_list?value=${event.target.value}`);
|
||||
api.fetchApi('/manager/channel_url_list', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ value: event.target.value }) });
|
||||
});
|
||||
|
||||
channel_combo.value = data.selected;
|
||||
@ -1152,7 +1152,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
});
|
||||
|
||||
component_policy_combo.addEventListener('change', function (event) {
|
||||
api.fetchApi(`/manager/policy/component?value=${event.target.value}`);
|
||||
api.fetchApi('/manager/policy/component', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ value: event.target.value }) });
|
||||
set_component_policy(event.target.value);
|
||||
});
|
||||
|
||||
@ -1171,7 +1171,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
});
|
||||
|
||||
update_policy_combo.addEventListener('change', function (event) {
|
||||
api.fetchApi(`/manager/policy/update?value=${event.target.value}`);
|
||||
api.fetchApi('/manager/policy/update', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ value: event.target.value }) });
|
||||
});
|
||||
|
||||
const updateSetttingItem = createSettingsCombo("Update", update_policy_combo);
|
||||
|
||||
@ -185,7 +185,7 @@ export async function rebootAPI() {
|
||||
const isConfirmed = await customConfirm("Are you sure you'd like to reboot the server?");
|
||||
if (isConfirmed) {
|
||||
try {
|
||||
const response = await api.fetchApi("/manager/reboot");
|
||||
const response = await api.fetchApi("/manager/reboot", { method: 'POST' });
|
||||
if (response.status == 403) {
|
||||
await handle403Response(response);
|
||||
return false;
|
||||
|
||||
@ -462,7 +462,7 @@ export class CustomNodesManager {
|
||||
|
||||
".cn-manager-stop": {
|
||||
click: () => {
|
||||
api.fetchApi('/manager/queue/reset');
|
||||
api.fetchApi('/manager/queue/reset', { method: 'POST' });
|
||||
infoToast('Cancel', 'Remaining tasks will stop after completing the current task.');
|
||||
}
|
||||
},
|
||||
@ -1476,9 +1476,15 @@ export class CustomNodesManager {
|
||||
let needRestart = false;
|
||||
let errorMsg = "";
|
||||
|
||||
await api.fetchApi('/manager/queue/reset');
|
||||
await api.fetchApi('/manager/queue/reset', { method: 'POST' });
|
||||
|
||||
// Set install_context BEFORE per-item queue enqueue calls so that any
|
||||
// server-side synchronous completion (e.g., sync enable of an inactive
|
||||
// node) that emits cm-queue-status before we return here still finds
|
||||
// install_context populated in onQueueCompleted. target_items is shared
|
||||
// by reference so further pushes below remain visible.
|
||||
let target_items = [];
|
||||
this.install_context = {btn: btn, targets: target_items};
|
||||
|
||||
for (const hash of list) {
|
||||
const item = this.grid.getRowItemBy("hash", hash);
|
||||
@ -1550,8 +1556,6 @@ export class CustomNodesManager {
|
||||
}
|
||||
}
|
||||
|
||||
this.install_context = {btn: btn, targets: target_items};
|
||||
|
||||
if(errorMsg) {
|
||||
this.showError(errorMsg);
|
||||
show_message("[Installation Errors]\n"+errorMsg);
|
||||
@ -1563,7 +1567,7 @@ export class CustomNodesManager {
|
||||
}
|
||||
}
|
||||
else {
|
||||
await api.fetchApi('/manager/queue/start');
|
||||
await api.fetchApi('/manager/queue/start', { method: 'POST' });
|
||||
this.showStop();
|
||||
showTerminal();
|
||||
}
|
||||
@ -1576,6 +1580,10 @@ export class CustomNodesManager {
|
||||
|
||||
const item = self.grid.getRowItemBy("hash", hash);
|
||||
|
||||
if (!item) {
|
||||
return;
|
||||
}
|
||||
|
||||
item.restart = true;
|
||||
self.restartMap[item.hash] = true;
|
||||
self.grid.updateCell(item, "action");
|
||||
@ -1583,45 +1591,81 @@ export class CustomNodesManager {
|
||||
}
|
||||
else if(event.detail.status == 'done') {
|
||||
self.hideStop();
|
||||
self.onQueueCompleted(event.detail);
|
||||
// Await + error logging so any unhandled rejection surfaces to the
|
||||
// console instead of silently swallowing completion finalization
|
||||
// (root cause of disable/enable button staying loading with no toast).
|
||||
try {
|
||||
await self.onQueueCompleted(event.detail);
|
||||
} catch (e) {
|
||||
console.error("[ComfyUI-Manager] onQueueCompleted failed:", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async onQueueCompleted(info) {
|
||||
// `nodepack_result` is a dict serialized from a Python dict, not an array.
|
||||
// `dict.length` is `undefined` and `undefined == 0` is `false`, so the
|
||||
// previous `result.length == 0` guard was a no-op; switch to a correct
|
||||
// empty-check that also tolerates null/undefined.
|
||||
let result = info.nodepack_result;
|
||||
|
||||
if(result.length == 0) {
|
||||
if (!result || Object.keys(result).length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
let self = CustomNodesManager.instance;
|
||||
|
||||
if(!self.install_context) {
|
||||
if (!self || !self.install_context) {
|
||||
return;
|
||||
}
|
||||
|
||||
const { target, label, mode } = self.install_context.btn;
|
||||
target.classList.remove("cn-btn-loading");
|
||||
const targets = self.install_context.targets || [];
|
||||
|
||||
// Compute errorMsg upfront so the downstream user-visible finalization
|
||||
// (showRestart / showMessage / infoToast) fires regardless of whether
|
||||
// any DOM-touching step below throws.
|
||||
let errorMsg = "";
|
||||
|
||||
for(let hash in result){
|
||||
for (let hash in result) {
|
||||
let v = result[hash];
|
||||
|
||||
if(v != 'success' && v != 'skip')
|
||||
errorMsg += v+'\n';
|
||||
if (v != 'success' && v != 'skip') {
|
||||
errorMsg += v + '\n';
|
||||
}
|
||||
}
|
||||
|
||||
for(let k in self.install_context.targets) {
|
||||
let item = self.install_context.targets[k];
|
||||
self.grid.updateCell(item, "action");
|
||||
// Defensive: `target` may be a detached DOM node (the in_progress
|
||||
// handler's updateCell can re-render the row and replace the button
|
||||
// element). classList.remove on a detached node is a no-op, but we
|
||||
// still guard in case target was torn down entirely.
|
||||
try {
|
||||
if (target && target.classList) {
|
||||
target.classList.remove("cn-btn-loading");
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn("[ComfyUI-Manager] Failed to clear button loading state:", e);
|
||||
}
|
||||
|
||||
// Defensive: grid.updateCell can throw if the item was removed or the
|
||||
// grid was re-rendered between in_progress and done. Do NOT let this
|
||||
// loop abort the completion finalization below — that was the observed
|
||||
// failure mode for disable/enable (no toast, no "restart required"
|
||||
// message).
|
||||
try {
|
||||
for (let k in targets) {
|
||||
let item = targets[k];
|
||||
if (item) {
|
||||
self.grid.updateCell(item, "action");
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn("[ComfyUI-Manager] Failed to refresh target cells after queue completion:", e);
|
||||
}
|
||||
|
||||
if (errorMsg) {
|
||||
self.showError(errorMsg);
|
||||
show_message("Installation Error:\n"+errorMsg);
|
||||
show_message("Installation Error:\n" + errorMsg);
|
||||
} else {
|
||||
self.showStatus(`${label} ${result.length} custom node(s) successfully`);
|
||||
self.showStatus(`${label} ${Object.keys(result).length} custom node(s) successfully`);
|
||||
}
|
||||
|
||||
self.showRestart();
|
||||
|
||||
@ -170,7 +170,7 @@ export class ModelManager {
|
||||
|
||||
".cmm-manager-stop": {
|
||||
click: () => {
|
||||
api.fetchApi('/manager/queue/reset');
|
||||
api.fetchApi('/manager/queue/reset', { method: 'POST' });
|
||||
infoToast('Cancel', 'Remaining tasks will stop after completing the current task.');
|
||||
}
|
||||
},
|
||||
@ -444,7 +444,7 @@ export class ModelManager {
|
||||
let needRefresh = false;
|
||||
let errorMsg = "";
|
||||
|
||||
await api.fetchApi('/manager/queue/reset');
|
||||
await api.fetchApi('/manager/queue/reset', { method: 'POST' });
|
||||
|
||||
let target_items = [];
|
||||
|
||||
@ -503,7 +503,7 @@ export class ModelManager {
|
||||
}
|
||||
}
|
||||
else {
|
||||
await api.fetchApi('/manager/queue/start');
|
||||
await api.fetchApi('/manager/queue/start', { method: 'POST' });
|
||||
this.showStop();
|
||||
showTerminal();
|
||||
}
|
||||
|
||||
@ -9,7 +9,7 @@ loadCss("./snapshot.css");
|
||||
async function restore_snapshot(target) {
|
||||
if(SnapshotManager.instance) {
|
||||
try {
|
||||
const response = await api.fetchApi(`/snapshot/restore?target=${target}`, { cache: "no-store" });
|
||||
const response = await api.fetchApi('/snapshot/restore', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ target: target }), cache: "no-store" });
|
||||
|
||||
if(response.status == 403) {
|
||||
await handle403Response(response);
|
||||
@ -37,7 +37,7 @@ async function restore_snapshot(target) {
|
||||
async function remove_snapshot(target) {
|
||||
if(SnapshotManager.instance) {
|
||||
try {
|
||||
const response = await api.fetchApi(`/snapshot/remove?target=${target}`, { cache: "no-store" });
|
||||
const response = await api.fetchApi('/snapshot/remove', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ target: target }), cache: "no-store" });
|
||||
|
||||
if(response.status == 403) {
|
||||
await handle403Response(response);
|
||||
@ -63,7 +63,7 @@ async function remove_snapshot(target) {
|
||||
|
||||
async function save_current_snapshot() {
|
||||
try {
|
||||
const response = await api.fetchApi('/snapshot/save', { cache: "no-store" });
|
||||
const response = await api.fetchApi('/snapshot/save', { method: 'POST', cache: "no-store" });
|
||||
app.ui.dialog.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1,25 +1,5 @@
|
||||
{
|
||||
"custom_nodes": [
|
||||
{
|
||||
"author": "andreszs",
|
||||
"title": "ComfyUI-Lora-Pipeline",
|
||||
"reference": "https://github.com/andreszs/ComfyUI-Lora-Pipeline",
|
||||
"files": [
|
||||
"https://github.com/andreszs/ComfyUI-Lora-Pipeline"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Area-based LoRA and conditioning workflow tools for ComfyUI with multi-region control."
|
||||
},
|
||||
{
|
||||
"author": "Zinigo",
|
||||
"title": "Prompt Builder [NAME CONFLICT]",
|
||||
"reference": "https://github.com/zinigo-creations/comfyui-prompt-builder",
|
||||
"files": [
|
||||
"https://github.com/zinigo-creations/comfyui-prompt-builder"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Dropdown-based prompt builder for ComfyUI. Create characters, scenes, and styles without writing prompts. Designed for beginners and fast iteration."
|
||||
},
|
||||
{
|
||||
"author": "ethanfel",
|
||||
"title": "Comfyui-Return-Run-Logic",
|
||||
@ -380,16 +360,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI node implementing SMC-CFG (Sliding Mode Control CFG) that replaces standard linear CFG with a nonlinear sliding mode controller for stable guidance at any CFG scale. NOT WORKING - Work in progress. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "AiSatan",
|
||||
"title": "ComfyUI_CSM [NAME CONFLICT]",
|
||||
"reference": "https://github.com/AiSatan/ComfyUI_CSM",
|
||||
"files": [
|
||||
"https://github.com/AiSatan/ComfyUI_CSM"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI node for the CSM model featuring text-to-speech, voice cloning, and automatic model downloading from Hugging Face."
|
||||
},
|
||||
{
|
||||
"author": "unobtuse",
|
||||
"title": "comfyui-topaz-ai-upscale",
|
||||
@ -471,16 +441,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "RunningHub Nano Banana Pro API node for ComfyUI"
|
||||
},
|
||||
{
|
||||
"author": "DazzleNodes",
|
||||
"title": "ComfyUI-DazzleSwitch",
|
||||
"reference": "https://github.com/DazzleNodes/ComfyUI-DazzleSwitch",
|
||||
"files": [
|
||||
"https://github.com/DazzleNodes/ComfyUI-DazzleSwitch"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Smart switch node for ComfyUI with dropdown-based input selection and INT override for cascading workflows. Route any data type through a named dropdown instead of moving noodles."
|
||||
},
|
||||
{
|
||||
"author": "Echoflare",
|
||||
"title": "ComfyUI-Reverse-Proxy-Fix",
|
||||
@ -1334,16 +1294,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom ComfyUI nodes for JSON processing and transcription workflows, including text-to-JSON conversion, SRT subtitle parsing, and file saving. (Description by CC)[w/This nodepack contains a node that has a vulnerability allowing write to arbitrary file paths.]"
|
||||
},
|
||||
{
|
||||
"author": "ShammiG",
|
||||
"title": "ComfyUI_Text_Tools_SG [UNSAFE]",
|
||||
"reference": "https://github.com/ShammiG/ComfyUI_Text_Tools_SG",
|
||||
"files": [
|
||||
"https://github.com/ShammiG/ComfyUI_Text_Tools_SG"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Text Editor node with Markdown editing plus quick shortcuts, Text Viewer node, with extra features plus Text Merge, Text Save and Load Text from anywhere nodes.[w/This nodepack contains a node that has a vulnerability allowing write to arbitrary file paths.]"
|
||||
},
|
||||
{
|
||||
"author": "Smyshnikof",
|
||||
"title": "ComfyUI-PresetDownloadManager [UNSAFE]",
|
||||
@ -1924,17 +1874,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: StringToListNode"
|
||||
},
|
||||
{
|
||||
"author": "krakenunbound",
|
||||
"title": "Kraken Discord Bot",
|
||||
"id": "kraken-discord-bot",
|
||||
"reference": "https://github.com/krakenunbound/kraken-discord-bot",
|
||||
"files": [
|
||||
"https://github.com/krakenunbound/kraken-discord-bot"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "All-in-one Discord bot node for AI image generation. Simple setup - just add token, select model, and queue. Includes style presets, rate limiting, and queue management."
|
||||
},
|
||||
{
|
||||
"author": "quinteroac",
|
||||
"title": "comfyui_api_executor_nodes",
|
||||
@ -3678,16 +3617,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI node for a frame by frame Diffusion."
|
||||
},
|
||||
{
|
||||
"author": "tfernd",
|
||||
"title": "Auto CPU Offload for ComfyUI [WIP]",
|
||||
"reference": "https://github.com/tfernd/ComfyUI-AutoCPUOffload",
|
||||
"files": [
|
||||
"https://github.com/tfernd/ComfyUI-AutoCPUOffload"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This extension introduces an 'Auto CPU Offload' node designed to reduce GPU VRAM usage by automatically offloading model components to the CPU. It intelligently manages the movement of model layers between the GPU and CPU, aiming to keep only the necessary parts in VRAM during inference."
|
||||
},
|
||||
{
|
||||
"author": "hujuying",
|
||||
"title": "comfyui_gemini_banana_api [WIP]",
|
||||
@ -4450,26 +4379,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "First universal metadata system for AI image generation, with template-driven architecture allowing easy extension to new services; comprehensive dependency tracking with automatic download resolution; lossless conversion between platform formats where possible; future-proof design with extensible schema and validation system.[w/This nodepack has a vulnerability that allows remote access to arbitrary file paths.]"
|
||||
},
|
||||
{
|
||||
"author": "Charonartist",
|
||||
"title": "ComfyUI LoRA Random Selector",
|
||||
"reference": "https://github.com/Charonartist/comfyui-lora-random-selector",
|
||||
"files": [
|
||||
"https://github.com/Charonartist/comfyui-lora-random-selector"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: WanMoeKSampler, WanMoeKSamplerAdvanced"
|
||||
},
|
||||
{
|
||||
"author": "Charonartist",
|
||||
"title": "ComfyUI LoRA Random Selector [WIP]",
|
||||
"reference": "https://github.com/Charonartist/comfyui-lora-random-selector",
|
||||
"files": [
|
||||
"https://github.com/Charonartist/comfyui-lora-random-selector"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node that randomly selects LoRA files by category and automatically applies corresponding trigger words.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "idoru",
|
||||
"title": "Filestash Upload Node [UNSAFE]",
|
||||
@ -5030,16 +4939,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "This project is the comfyui implementation of ComfyUI_SZtools, a labeling and naming tool developed for Kontext's local training package T2ITrainer.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "stalkervr",
|
||||
"title": "Custom Path Nodes for ComfyUI [UNSAFE]",
|
||||
"reference": "https://github.com/stalkervr/comfyui-custom-path-nodes",
|
||||
"files": [
|
||||
"https://github.com/stalkervr/comfyui-custom-path-nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes for path handling and image cropping.[w/This nodepack contains a node that has a vulnerability allowing access to arbitrary file paths.]"
|
||||
},
|
||||
{
|
||||
"author": "gorillaframeai",
|
||||
"title": "GF_pixtral_node [WIP]",
|
||||
@ -5521,16 +5420,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: Trim Image Batch, Create Image Batch, Select Image Batch by Mask, Advanced Batch Creator"
|
||||
},
|
||||
{
|
||||
"author": "stalkervr",
|
||||
"title": "comfyui-custom-path-nodes [UNSAFE]",
|
||||
"reference": "https://github.com/stalkervr/comfyui-custom-path-nodes",
|
||||
"files": [
|
||||
"https://github.com/stalkervr/comfyui-custom-path-nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes for path handling and image cropping.[w/This nodepack has a vulnerability that allows remote access to arbitrary file paths.]"
|
||||
},
|
||||
{
|
||||
"author": "vovler",
|
||||
"title": "comfyui-vovlertools",
|
||||
@ -6192,16 +6081,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node that ingests GitHub repositories and outputs their content as text along with token count.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "Charonartist",
|
||||
"title": "ComfyUI-send-eagle-pro",
|
||||
"reference": "https://github.com/Charonartist/ComfyUI-send-eagle-pro_2",
|
||||
"files": [
|
||||
"https://github.com/Charonartist/ComfyUI-send-eagle-pro_2"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Eagle integration extension node for ComfyUI (Pro version)"
|
||||
},
|
||||
{
|
||||
"author": "Mervent",
|
||||
"title": "comfyui-yaml-prompt",
|
||||
@ -6232,16 +6111,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: TelegramSend, TelegramReply"
|
||||
},
|
||||
{
|
||||
"author": "qlikpetersen",
|
||||
"title": "ComfyUI-AI_Tools [UNSAFE]",
|
||||
"reference": "https://github.com/qlikpetersen/ComfyUI-AI_Tools",
|
||||
"files": [
|
||||
"https://github.com/qlikpetersen/ComfyUI-AI_Tools"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: DoLogin, HttpRequest, Json2String, String2Json, CreateListString, CreateListJSON, Query_OpenAI, Image_Attachment, JSON_Attachment, String_Attachment, RunPython\n[w/This nodepack contains a node with a vulnerability that allows arbitrary code execution.]"
|
||||
},
|
||||
{
|
||||
"author": "MuAIGC",
|
||||
"title": "DMXAPI Nodes [WIP]",
|
||||
@ -9723,16 +9592,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:ComfyFlux Size\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "yojimbodayne",
|
||||
"title": "ComfyUI-Dropbox-API [WIP]",
|
||||
"reference": "https://github.com/yojimbodayne/ComfyUI-Dropbox-API",
|
||||
"files": [
|
||||
"https://github.com/yojimbodayne/ComfyUI-Dropbox-API"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This custom nodepackage for ComfyUI allows users to interact with Dropbox API, enabling image, text, and video uploads, downloads, and management directly from ComfyUI workflows.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "ilovejohnwhite",
|
||||
"title": "Kolors Awesome Prompts [WIP]",
|
||||
@ -10261,16 +10120,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:Load SD3DiffusersPipeline, SD3 ControlNet Sampler"
|
||||
},
|
||||
{
|
||||
"author": "AustinMroz",
|
||||
"title": "ComfyUI-SD3-Medium-CN-Diffusers [WIP]",
|
||||
"reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-SD3-Medium-CN-Diffusers",
|
||||
"files": [
|
||||
"https://github.com/AustinMroz/ComfyUI-WorkflowCheckpointing"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI SD3-Medium ControlNet (Diffusers)"
|
||||
},
|
||||
{
|
||||
"author": "redhottensors",
|
||||
"title": "ComfyUI-ODE",
|
||||
|
||||
@ -341,7 +341,6 @@
|
||||
"ImageBlendText",
|
||||
"ImageBlendV1",
|
||||
"ImageGridSplitter",
|
||||
"ImageRatioCrop",
|
||||
"Load_Images_Advance",
|
||||
"Load_Images_V1",
|
||||
"PD Image Resize_V1",
|
||||
@ -413,6 +412,7 @@
|
||||
"PD_image_to_text_v1",
|
||||
"PD_imagesave_path",
|
||||
"PD_load_image_v1",
|
||||
"PD_lora_loader",
|
||||
"PD_name_replacewordorder",
|
||||
"PD_number_star",
|
||||
"PD_number_start",
|
||||
@ -667,14 +667,6 @@
|
||||
"title_aux": "SplatViwer_comfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/AiSatan/ComfyUI_CSM": [
|
||||
[
|
||||
"CSM_Transformers_Node"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_CSM [NAME CONFLICT]"
|
||||
}
|
||||
],
|
||||
"https://github.com/AkiEvansDev/ComfyUI-Tools": [
|
||||
[
|
||||
"AE.AnySwitch",
|
||||
@ -838,15 +830,15 @@
|
||||
"TS_AudioPreview",
|
||||
"TS_BGRM_BiRefNet",
|
||||
"TS_BatchPromptLoader",
|
||||
"TS_CPULoraMerger",
|
||||
"TS_Color_Grade",
|
||||
"TS_Color_Match",
|
||||
"TS_DeflickerNode",
|
||||
"TS_Despill",
|
||||
"TS_FileBrowser",
|
||||
"TS_FilePathLoader",
|
||||
"TS_FilmGrain",
|
||||
"TS_Film_Emulation",
|
||||
"TS_FloatSlider",
|
||||
"TS_Frame_Interpolation",
|
||||
"TS_Free_Video_Memory",
|
||||
"TS_GetImageMegapixels",
|
||||
"TS_GetImageSizeSide",
|
||||
@ -860,11 +852,13 @@
|
||||
"TS_Int_Slider",
|
||||
"TS_Keyer",
|
||||
"TS_LTX_FirstLastFrame",
|
||||
"TS_LamaCleanup",
|
||||
"TS_Math_Int",
|
||||
"TS_ModelConverter",
|
||||
"TS_ModelConverterAdvanced",
|
||||
"TS_ModelConverterAdvancedDirect",
|
||||
"TS_ModelScanner",
|
||||
"TS_MultiReference",
|
||||
"TS_MusicStems",
|
||||
"TS_PromptBuilder",
|
||||
"TS_Qwen3_VL_V3",
|
||||
@ -876,6 +870,7 @@
|
||||
"TS_SileroTTS",
|
||||
"TS_Smart_Switch",
|
||||
"TS_StylePromptSelector",
|
||||
"TS_SuperPrompt",
|
||||
"TS_VideoDepthNode",
|
||||
"TS_Video_Upscale_With_Model",
|
||||
"TS_WAN_SafeResize"
|
||||
@ -1297,6 +1292,7 @@
|
||||
],
|
||||
"https://github.com/Chargeuk/ComfyUI-vts-nodes": [
|
||||
[
|
||||
"VAELoader VTS",
|
||||
"VTS Add Text To list",
|
||||
"VTS Calculate Upscale Amount",
|
||||
"VTS Clean Text",
|
||||
@ -1315,8 +1311,11 @@
|
||||
"VTS Create Character Mask",
|
||||
"VTS Delete Saved Images",
|
||||
"VTS Fix Image Tags",
|
||||
"VTS Frame Interpolate",
|
||||
"VTS Image Batch Extend With Overlap",
|
||||
"VTS Image Composite Masked",
|
||||
"VTS Image Composite Masked Old",
|
||||
"VTS Image From Batch",
|
||||
"VTS Image To Disk",
|
||||
"VTS Image Upscale With Model",
|
||||
"VTS Images Crop From Masks",
|
||||
@ -1327,6 +1326,8 @@
|
||||
"VTS Merge Delimited Text",
|
||||
"VTS Merge Text",
|
||||
"VTS Merge Text Lists",
|
||||
"VTS Prompt Batcher",
|
||||
"VTS Random Prompt Builder",
|
||||
"VTS Reduce Batch Size",
|
||||
"VTS Render People Kps",
|
||||
"VTS Repeat Text As List",
|
||||
@ -1339,6 +1340,7 @@
|
||||
"VTS To Text",
|
||||
"VTS To Text List",
|
||||
"VTS VAE Decode Tiled",
|
||||
"VTSLTXAddVideoICLoRAGuide",
|
||||
"VTS_Load_Pose_Keypoints",
|
||||
"Vts Text To Batch Prompt"
|
||||
],
|
||||
@ -1346,28 +1348,6 @@
|
||||
"title_aux": "ComfyUI-vts-nodes [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/Charonartist/ComfyUI-send-eagle-pro_2": [
|
||||
[
|
||||
"Batch Send Media to Eagle",
|
||||
"Send Audio to Eagle",
|
||||
"Send Eagle with text",
|
||||
"Send Media to Eagle",
|
||||
"Send Media to Eagle (Advanced)",
|
||||
"Send Video to Eagle",
|
||||
"Send Webp Image to Eagle"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-send-eagle-pro"
|
||||
}
|
||||
],
|
||||
"https://github.com/Charonartist/comfyui-lora-random-selector": [
|
||||
[
|
||||
"LoRARandomSelector"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI LoRA Random Selector [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/ChrisColeTech/ComfyUI-Get-Random-File": [
|
||||
[
|
||||
"Get Image File By Index",
|
||||
@ -1664,14 +1644,6 @@
|
||||
"title_aux": "comfyui-djb-utils"
|
||||
}
|
||||
],
|
||||
"https://github.com/DazzleNodes/ComfyUI-DazzleSwitch": [
|
||||
[
|
||||
"DazzleSwitch"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-DazzleSwitch"
|
||||
}
|
||||
],
|
||||
"https://github.com/DeTK/ComfyUI-Switch": [
|
||||
[
|
||||
"NodeSwitch"
|
||||
@ -1972,6 +1944,7 @@
|
||||
"Base64ToImageNode by IAT",
|
||||
"FloatInputNode by IAT",
|
||||
"GPTReversePrompt by IAT",
|
||||
"ImageColorPaletteExtractor by IAT",
|
||||
"ImageMatchSize by IAT",
|
||||
"ImageResizeLongestSide by IAT",
|
||||
"ImageResizeToSDXL by IAT",
|
||||
@ -1981,6 +1954,7 @@
|
||||
"Qwen35ReversePrompt by IAT",
|
||||
"QwenKontextTranslator by IAT",
|
||||
"QwenTranslator by IAT",
|
||||
"SaveAudioMP3WithCover by IAT",
|
||||
"SeedGeneratorNode by IAT",
|
||||
"SmartPathBuilderNode by IAT",
|
||||
"TextInputNode by IAT"
|
||||
@ -3205,6 +3179,7 @@
|
||||
"MpiInt",
|
||||
"MpiJsonLoad",
|
||||
"MpiJsonSave",
|
||||
"MpiListCount",
|
||||
"MpiLogger",
|
||||
"MpiLoraModel",
|
||||
"MpiLoraModelClip",
|
||||
@ -3347,6 +3322,7 @@
|
||||
"DownloadCivitaiModel",
|
||||
"ExtraCheckpointData",
|
||||
"ExtractTagFromString",
|
||||
"MergeData",
|
||||
"PrepareCheckpoint",
|
||||
"PrepareLoRA",
|
||||
"PromptTidy",
|
||||
@ -3830,6 +3806,7 @@
|
||||
[
|
||||
"DualEndpointColorBlendScheduler",
|
||||
"GemmaAPITextEncode",
|
||||
"LightLeaksTransition",
|
||||
"MaskClampedCrop",
|
||||
"MaskClampedCropSticky"
|
||||
],
|
||||
@ -4138,6 +4115,8 @@
|
||||
"UniRigLoadMesh",
|
||||
"UniRigLoadModel",
|
||||
"UniRigLoadRiggedMesh",
|
||||
"UniRigLoadSkeletonModel",
|
||||
"UniRigLoadSkinningModel",
|
||||
"UniRigOrientationCheck",
|
||||
"UniRigPreviewRiggedMesh",
|
||||
"UniRigSaveMesh",
|
||||
@ -4549,20 +4528,6 @@
|
||||
"title_aux": "ComfyUI-Mojen-Nodeset"
|
||||
}
|
||||
],
|
||||
"https://github.com/ShammiG/ComfyUI_Text_Tools_SG": [
|
||||
[
|
||||
"Text Tools Editor-SG",
|
||||
"Text Tools Load Text FilePath-SG",
|
||||
"Text Tools Load Text-SG",
|
||||
"Text Tools Merge Text Multi-SG",
|
||||
"Text Tools Merge Text-SG",
|
||||
"Text Tools Save Text File-SG",
|
||||
"Text Tools Viewer-SG"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_Text_Tools_SG [UNSAFE]"
|
||||
}
|
||||
],
|
||||
"https://github.com/Shinsplat/ComfyUI-Shinsplat": [
|
||||
[
|
||||
"Clip Text Encode (Shinsplat)",
|
||||
@ -4740,6 +4705,7 @@
|
||||
"AdvancedSchedulerSelector",
|
||||
"ApplyPipeline",
|
||||
"AsyncDiffConfig",
|
||||
"AttentionBackendConfig",
|
||||
"BalancedConfig",
|
||||
"BitsAndBytesQuantizationConfig",
|
||||
"CheckpointSelector",
|
||||
@ -4768,6 +4734,7 @@
|
||||
"TorchAOQuantizationConfig",
|
||||
"TorchConfig",
|
||||
"UnsafeModelSelector",
|
||||
"WanSampler",
|
||||
"ZImageSampler"
|
||||
],
|
||||
{
|
||||
@ -4804,135 +4771,6 @@
|
||||
"title_aux": "PMSnodes [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/Solarish/ComfyUI-MidnightLook": [
|
||||
[
|
||||
"CameraBasicFromChaoJie",
|
||||
"CameraCombineFromChaoJie",
|
||||
"CameraJoinFromChaoJie",
|
||||
"CameraTrajectoryFromChaoJie",
|
||||
"CogVideoXFunInpaintSampler",
|
||||
"CogVideoXFunT2VSampler",
|
||||
"CogVideoXFunV2VSampler",
|
||||
"CombineFlux2Pipeline",
|
||||
"CombineQwenImagePipeline",
|
||||
"CombineWan2_2Pipeline",
|
||||
"CombineWan2_2VaceFunPipeline",
|
||||
"CombineWanPipeline",
|
||||
"CombineZImagePipeline",
|
||||
"CreateTrajectoryBasedOnKJNodes",
|
||||
"Flux2ControlSampler",
|
||||
"Flux2T2ISampler",
|
||||
"FunAttention",
|
||||
"FunCompile",
|
||||
"FunRiflex",
|
||||
"FunTextBox",
|
||||
"ImageCollectNode",
|
||||
"ImageMaximumNode",
|
||||
"ImageToCanny",
|
||||
"ImageToDepth",
|
||||
"ImageToPose",
|
||||
"LoadCogVideoXFunLora",
|
||||
"LoadCogVideoXFunModel",
|
||||
"LoadFlux2ControlNetInModel",
|
||||
"LoadFlux2ControlNetInPipeline",
|
||||
"LoadFlux2Lora",
|
||||
"LoadFlux2Model",
|
||||
"LoadFlux2TextEncoderModel",
|
||||
"LoadFlux2TransformerModel",
|
||||
"LoadFlux2VAEModel",
|
||||
"LoadQwenImageControlNetInModel",
|
||||
"LoadQwenImageControlNetInPipeline",
|
||||
"LoadQwenImageLora",
|
||||
"LoadQwenImageModel",
|
||||
"LoadQwenImageProcessor",
|
||||
"LoadQwenImageTextEncoderModel",
|
||||
"LoadQwenImageTransformerModel",
|
||||
"LoadQwenImageVAEModel",
|
||||
"LoadVaceWanTransformer3DModel",
|
||||
"LoadWan2_2FunLora",
|
||||
"LoadWan2_2FunModel",
|
||||
"LoadWan2_2Lora",
|
||||
"LoadWan2_2Model",
|
||||
"LoadWan2_2TransformerModel",
|
||||
"LoadWan2_2VaceFunModel",
|
||||
"LoadWanClipEncoderModel",
|
||||
"LoadWanFunLora",
|
||||
"LoadWanFunModel",
|
||||
"LoadWanLora",
|
||||
"LoadWanModel",
|
||||
"LoadWanTextEncoderModel",
|
||||
"LoadWanTransformerModel",
|
||||
"LoadWanVAEModel",
|
||||
"LoadZImageControlNetInModel",
|
||||
"LoadZImageControlNetInPipeline",
|
||||
"LoadZImageLora",
|
||||
"LoadZImageModel",
|
||||
"LoadZImageTextEncoderModel",
|
||||
"LoadZImageTransformerModel",
|
||||
"LoadZImageVAEModel",
|
||||
"MidnightLook-AnyToString",
|
||||
"MidnightLook-CanvasExpand",
|
||||
"MidnightLook-CropDataToBBox",
|
||||
"MidnightLook-CropForInpaint",
|
||||
"MidnightLook-DeepFaceCrop",
|
||||
"MidnightLook-DeepFaceVerify",
|
||||
"MidnightLook-Detailer",
|
||||
"MidnightLook-DisplayAny",
|
||||
"MidnightLook-ExpandCropMask",
|
||||
"MidnightLook-GrowMaskWithBlur",
|
||||
"MidnightLook-ImageCompare",
|
||||
"MidnightLook-IterativeUpscale",
|
||||
"MidnightLook-LatentSizePresets",
|
||||
"MidnightLook-LoadImageByURL",
|
||||
"MidnightLook-LoopEnd",
|
||||
"MidnightLook-LoopStart",
|
||||
"MidnightLook-MediaPipeFaceCrop",
|
||||
"MidnightLook-PasteAfterInpaint",
|
||||
"MidnightLook-PreFill",
|
||||
"MidnightLook-PresetPrompt",
|
||||
"MidnightLook-Qwen25Load",
|
||||
"MidnightLook-Qwen25Run",
|
||||
"MidnightLook-QwenGuidance",
|
||||
"MidnightLook-QwenSmartCropPad",
|
||||
"MidnightLook-SAM2Loader",
|
||||
"MidnightLook-StringToBBox",
|
||||
"MidnightLook-TextBox",
|
||||
"MidnightLook-URLLoRALoader",
|
||||
"MidnightLook-UploadToR2",
|
||||
"MidnightLook-UpscalerProvider",
|
||||
"MidnightLook-VRAMClear",
|
||||
"MidnightLook-ZImageCNLoader",
|
||||
"MidnightLook-ZImageCNSampler",
|
||||
"MidnightLook-ZImageInpaintSampler",
|
||||
"MidnightLook-ZImageLoader",
|
||||
"MidnightLook-ZImageOutpaintSampler",
|
||||
"MidnightLook-ZImagePrompt",
|
||||
"PassThroughImage",
|
||||
"QwenImageControlSampler",
|
||||
"QwenImageEditPlusSampler",
|
||||
"QwenImageEditSampler",
|
||||
"QwenImageT2VSampler",
|
||||
"VideoToCanny",
|
||||
"VideoToDepth",
|
||||
"VideoToOpenpose",
|
||||
"Wan2_2FunInpaintSampler",
|
||||
"Wan2_2FunT2VSampler",
|
||||
"Wan2_2FunV2VSampler",
|
||||
"Wan2_2I2VSampler",
|
||||
"Wan2_2T2VSampler",
|
||||
"Wan2_2VaceFunSampler",
|
||||
"WanFunInpaintSampler",
|
||||
"WanFunT2VSampler",
|
||||
"WanFunV2VSampler",
|
||||
"WanI2VSampler",
|
||||
"WanT2VSampler",
|
||||
"ZImageControlSampler",
|
||||
"ZImageT2ISampler"
|
||||
],
|
||||
{
|
||||
"title_aux": "fyUI-MidnightLook [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/Soliton80/ComfyUI-Watermark-Detection-YOLO": [
|
||||
[
|
||||
"WatermarkDetector",
|
||||
@ -4996,6 +4834,8 @@
|
||||
],
|
||||
"https://github.com/StableDiffusionVN/SDVN_Comfy_node": [
|
||||
[
|
||||
"InpaintCropImproved",
|
||||
"InpaintStitchImproved",
|
||||
"SDVM Image List Repeat",
|
||||
"SDVN API chatbot",
|
||||
"SDVN Any From List",
|
||||
@ -5459,6 +5299,17 @@
|
||||
"title_aux": "ComfyUI-yolov5-face [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/V-woodpecker-V/comfyui-stiffy-nodes": [
|
||||
[
|
||||
"StiffyComboNode",
|
||||
"StiffyComplexPresetNode",
|
||||
"StiffyDecoderNode",
|
||||
"StiffySimplePresetNode"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-stiffy-nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/VectorASD/ComfyUI-VectorASD": [
|
||||
[
|
||||
"ASD_CLIPLoader",
|
||||
@ -5808,6 +5659,7 @@
|
||||
"BlenderCombineXYZ",
|
||||
"BlenderCrop",
|
||||
"BlenderGamma",
|
||||
"BlenderGradientTexture",
|
||||
"BlenderHueSaturationValue",
|
||||
"BlenderInvertColor",
|
||||
"BlenderLensDistortion",
|
||||
@ -6474,6 +6326,7 @@
|
||||
"https://github.com/baoanhng/ComfyUI-utils": [
|
||||
[
|
||||
"TextJoiner",
|
||||
"TextJoinerTags",
|
||||
"TextSplitter"
|
||||
],
|
||||
{
|
||||
@ -6495,13 +6348,13 @@
|
||||
],
|
||||
"https://github.com/basenc/Comfyui-Nodes-basenc": [
|
||||
[
|
||||
"ChatMessagesCreate",
|
||||
"CustomOpenAIChatCompletion",
|
||||
"CustomOpenAIResponse",
|
||||
"DimensionsPresetPicker",
|
||||
"EnvVarNode",
|
||||
"Eval",
|
||||
"JMESPathSelect",
|
||||
"RescaleToDimensions",
|
||||
"ResponseInputAppend",
|
||||
"WanVideoSize"
|
||||
],
|
||||
{
|
||||
@ -7167,6 +7020,7 @@
|
||||
"https://github.com/comfyanonymous/ComfyUI": [
|
||||
[
|
||||
"APG",
|
||||
"ARVideoI2V",
|
||||
"AddNoise",
|
||||
"AlignYourStepsScheduler",
|
||||
"AudioAdjustVolume",
|
||||
@ -7190,6 +7044,8 @@
|
||||
"ByteDance2FirstLastFrameNode",
|
||||
"ByteDance2ReferenceNode",
|
||||
"ByteDance2TextToVideoNode",
|
||||
"ByteDanceCreateImageAsset",
|
||||
"ByteDanceCreateVideoAsset",
|
||||
"ByteDanceFirstLastFrameNode",
|
||||
"ByteDanceImageNode",
|
||||
"ByteDanceImageReferenceNode",
|
||||
@ -7275,6 +7131,7 @@
|
||||
"ElevenLabsTextToSoundEffects",
|
||||
"ElevenLabsTextToSpeech",
|
||||
"ElevenLabsVoiceSelector",
|
||||
"EmptyARVideoLatent",
|
||||
"EmptyAceStep1.5LatentAudio",
|
||||
"EmptyAceStepLatentAudio",
|
||||
"EmptyAudio",
|
||||
@ -7307,6 +7164,8 @@
|
||||
"FluxProExpandNode",
|
||||
"FluxProFillNode",
|
||||
"FluxProUltraImageNode",
|
||||
"FrameInterpolate",
|
||||
"FrameInterpolationModelLoader",
|
||||
"FreSca",
|
||||
"FreeU",
|
||||
"FreeU_V2",
|
||||
@ -7318,6 +7177,7 @@
|
||||
"GeminiImageNode",
|
||||
"GeminiInputFiles",
|
||||
"GeminiNanoBanana2",
|
||||
"GeminiNanoBanana2V2",
|
||||
"GeminiNode",
|
||||
"GenerateTracks",
|
||||
"GetImageSize",
|
||||
@ -7329,6 +7189,10 @@
|
||||
"GrokVideoNode",
|
||||
"GrokVideoReferenceNode",
|
||||
"GrowMask",
|
||||
"HappyHorseImageToVideoApi",
|
||||
"HappyHorseReferenceVideoApi",
|
||||
"HappyHorseTextToVideoApi",
|
||||
"HappyHorseVideoEditApi",
|
||||
"HitPawGeneralImageEnhance",
|
||||
"HitPawVideoEnhance",
|
||||
"Hunyuan3Dv2Conditioning",
|
||||
@ -7413,7 +7277,6 @@
|
||||
"LTXAVTextEncoderLoader",
|
||||
"LTXVAddGuide",
|
||||
"LTXVAudioVAEDecode",
|
||||
"LTXVAudioVAEEncode",
|
||||
"LTXVAudioVAELoader",
|
||||
"LTXVConcatAVLatent",
|
||||
"LTXVConditioning",
|
||||
@ -7453,6 +7316,7 @@
|
||||
"LazyCache",
|
||||
"Load3D",
|
||||
"LoadAudio",
|
||||
"LoadBackgroundRemovalModel",
|
||||
"LoadImage",
|
||||
"LoadImageDataSetFromFolder",
|
||||
"LoadImageMask",
|
||||
@ -7472,8 +7336,10 @@
|
||||
"LtxvApiImageToVideo",
|
||||
"LtxvApiTextToVideo",
|
||||
"LumaConceptsNode",
|
||||
"LumaImageEditNode2",
|
||||
"LumaImageModifyNode",
|
||||
"LumaImageNode",
|
||||
"LumaImageNode2",
|
||||
"LumaImageToVideoNode",
|
||||
"LumaReferenceNode",
|
||||
"LumaVideoNode",
|
||||
@ -7529,9 +7395,6 @@
|
||||
"ModelSamplingSD3",
|
||||
"ModelSamplingStableCascade",
|
||||
"ModelSave",
|
||||
"MoonvalleyImg2VideoNode",
|
||||
"MoonvalleyTxt2VideoNode",
|
||||
"MoonvalleyVideo2VideoNode",
|
||||
"Morphology",
|
||||
"NAGuidance",
|
||||
"NormalizeVideoLatentStart",
|
||||
@ -7542,6 +7405,7 @@
|
||||
"OpenAIGPTImage1",
|
||||
"OpenAIInputFiles",
|
||||
"OpenAIVideoSora2",
|
||||
"OpticalFlowLoader",
|
||||
"OptimalStepsScheduler",
|
||||
"Painter",
|
||||
"PatchModelAddDownscale",
|
||||
@ -7595,6 +7459,7 @@
|
||||
"RegexExtract",
|
||||
"RegexMatch",
|
||||
"RegexReplace",
|
||||
"RemoveBackground",
|
||||
"RenormCFG",
|
||||
"RepeatImageBatch",
|
||||
"RepeatLatentBatch",
|
||||
@ -7616,6 +7481,10 @@
|
||||
"RunwayImageToVideoNodeGen3a",
|
||||
"RunwayImageToVideoNodeGen4",
|
||||
"RunwayTextToImageNode",
|
||||
"SAM3_Detect",
|
||||
"SAM3_TrackPreview",
|
||||
"SAM3_TrackToMask",
|
||||
"SAM3_VideoTrack",
|
||||
"SDPoseDrawKeypoints",
|
||||
"SDPoseFaceBBoxes",
|
||||
"SDPoseKeypointExtractor",
|
||||
@ -7624,6 +7493,7 @@
|
||||
"SUPIRApply",
|
||||
"SV3D_Conditioning",
|
||||
"SVD_img2vid_Conditioning",
|
||||
"SamplerARVideo",
|
||||
"SamplerCustom",
|
||||
"SamplerCustomAdvanced",
|
||||
"SamplerDPMAdaptative",
|
||||
@ -7769,6 +7639,7 @@
|
||||
"TomePatchModel",
|
||||
"TopazImageEnhance",
|
||||
"TopazVideoEnhance",
|
||||
"TopazVideoEnhanceV2",
|
||||
"TorchCompileModel",
|
||||
"TrainLoraNode",
|
||||
"TrimAudioDuration",
|
||||
@ -7799,8 +7670,14 @@
|
||||
"VAEEncodeTiled",
|
||||
"VAELoader",
|
||||
"VAESave",
|
||||
"VOIDInpaintConditioning",
|
||||
"VOIDQuadmaskPreprocess",
|
||||
"VOIDSampler",
|
||||
"VOIDWarpedNoise",
|
||||
"VOIDWarpedNoiseSource",
|
||||
"VPScheduler",
|
||||
"Veo3FirstLastFrameNode",
|
||||
"Veo3VideoGenerationNode",
|
||||
"VeoVideoGenerationNode",
|
||||
"Video Slice",
|
||||
"VideoLinearCFGGuidance",
|
||||
@ -9121,6 +8998,7 @@
|
||||
"HolafLutGenerator",
|
||||
"HolafLutSaver",
|
||||
"HolafMaskToBoolean",
|
||||
"HolafNucleusImage",
|
||||
"HolafOverlayNode",
|
||||
"HolafRemote",
|
||||
"HolafRemoteSelector",
|
||||
@ -10509,15 +10387,6 @@
|
||||
"title_aux": "ComfyUI_was_image"
|
||||
}
|
||||
],
|
||||
"https://github.com/krakenunbound/kraken-discord-bot": [
|
||||
[
|
||||
"KrakenDiscordBot",
|
||||
"KrakenDiscordBotStatus"
|
||||
],
|
||||
{
|
||||
"title_aux": "Kraken Discord Bot"
|
||||
}
|
||||
],
|
||||
"https://github.com/krich-cto/ComfyUI-Flow-Control": [
|
||||
[
|
||||
"CLIPLoaderGGUF",
|
||||
@ -10656,18 +10525,25 @@
|
||||
],
|
||||
"https://github.com/lazybuttalented/ComfyUI_LBT": [
|
||||
[
|
||||
"LBT_BooleanAND",
|
||||
"LBT_CombineImagesFromBatch",
|
||||
"LBT_CombineImagesFromList",
|
||||
"LBT_CropByMask",
|
||||
"LBT_GetFolderInfo",
|
||||
"LBT_ListInfo",
|
||||
"LBT_LoadImageFromPath",
|
||||
"LBT_LoadImagesFromFolder",
|
||||
"LBT_LoadImagesFromList",
|
||||
"LBT_LoadMultilineText",
|
||||
"LBT_LoadTextFromFolder",
|
||||
"LBT_LoadVideoFromFolder",
|
||||
"LBT_SaveImage",
|
||||
"LBT_SaveVideo",
|
||||
"LBT_ShowTextEditable",
|
||||
"LBT_StringToList",
|
||||
"LBT_TextImageLibraryComparison"
|
||||
"LBT_SwitchNoPause",
|
||||
"LBT_TextImageLibraryComparison",
|
||||
"LBT_TextKeywordMatch"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_LBT [WIP]"
|
||||
@ -11340,12 +11216,18 @@
|
||||
"KM_Aspect_Ratio_Selector2",
|
||||
"KM_CFGGuider",
|
||||
"KM_Color_Correct",
|
||||
"KM_Color_Match",
|
||||
"KM_Downscale_Image",
|
||||
"KM_Extract_Images",
|
||||
"KM_Merge_Images",
|
||||
"KM_Resize_Image",
|
||||
"KM_Resize_Image_With_Model",
|
||||
"KM_Safe_Mask_Bounds",
|
||||
"KM_Safe_SEGS_Bounds",
|
||||
"KM_Select_Every_Nth_Image",
|
||||
"KM_Select_Image",
|
||||
"KM_Split_Images",
|
||||
"KM_Video_Blend",
|
||||
"KM_Video_Image_Color_Match",
|
||||
"KM_WanVideoToVideo",
|
||||
"WanImageToVideo"
|
||||
@ -11755,6 +11637,45 @@
|
||||
"title_aux": "ComfyUI-TextOverlay"
|
||||
}
|
||||
],
|
||||
"https://github.com/nekotxt/ComfyUI-NTX-support-nodes": [
|
||||
[
|
||||
"ApplyLoraStack",
|
||||
"AutogrowNode",
|
||||
"CLIPTextEncodeWithCutoff",
|
||||
"CollectModelNtxdata",
|
||||
"ConvertLoraStackToString",
|
||||
"ConvertLoraStringToStack",
|
||||
"CreateImageLatent",
|
||||
"DictGet",
|
||||
"DictSet",
|
||||
"DictSetMulti",
|
||||
"DynamicComboNode",
|
||||
"DynamicTwinNode",
|
||||
"GenerationDataGet",
|
||||
"GenerationDataMaxSize",
|
||||
"GenerationDataSet",
|
||||
"ListCount",
|
||||
"ListGet",
|
||||
"ListSet",
|
||||
"LoadCharInfo",
|
||||
"LoadCharacterInfo",
|
||||
"LoadCheckpointInfo",
|
||||
"LoadCustomVae",
|
||||
"LoraStack",
|
||||
"MergeLoraStacks",
|
||||
"PipeBase",
|
||||
"PromptChainer",
|
||||
"ReplaceTextParameters",
|
||||
"RerouteBase",
|
||||
"SaveMultipleImages",
|
||||
"SwitchAny",
|
||||
"SwitchNode",
|
||||
"Test"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-NTX-support-nodes [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/neo0801/my-comfy-node": [
|
||||
[
|
||||
"DeepMosaicGetImageMosaicMask",
|
||||
@ -11889,9 +11810,11 @@
|
||||
"LoRATextDualInput",
|
||||
"LoraToCivitaiUrl",
|
||||
"LoraWildcardGenerator",
|
||||
"LoraWildcardGeneratorV2",
|
||||
"RepeatTextLines",
|
||||
"SDPromptSaverOptimized",
|
||||
"SDPromptSaverWithCompression",
|
||||
"SeedStepN",
|
||||
"TIPONobinCustom",
|
||||
"TextSplit3"
|
||||
],
|
||||
{
|
||||
@ -12334,6 +12257,7 @@
|
||||
"przewodo ImageScaleFactor",
|
||||
"przewodo ImageSizer",
|
||||
"przewodo IsInputDisabled",
|
||||
"przewodo LTXVAEDriftFix",
|
||||
"przewodo LtxKeyFrameIndexes",
|
||||
"przewodo SendFirstValidValue",
|
||||
"przewodo SwapAnyComparison",
|
||||
@ -12405,38 +12329,6 @@
|
||||
"title_aux": "ComfyUI-Qimi-Tiler"
|
||||
}
|
||||
],
|
||||
"https://github.com/qlikpetersen/ComfyUI-AI_Tools": [
|
||||
[
|
||||
"CreateListJSON",
|
||||
"CreateListString",
|
||||
"DoLogin",
|
||||
"FixLinksAndRevLinks",
|
||||
"HttpRequest",
|
||||
"Image_Attachment",
|
||||
"IncludeInSpiderData",
|
||||
"JSON_Attachment",
|
||||
"Json2String",
|
||||
"LoadSpiderData",
|
||||
"PNGtoImage",
|
||||
"Query_OpenAI",
|
||||
"RemoveCircularReferences",
|
||||
"RunPython",
|
||||
"RunPythonGriptapeTool",
|
||||
"SaveSpiderData",
|
||||
"SpiderCrawl",
|
||||
"SpiderSplit",
|
||||
"String2Json",
|
||||
"String_Attachment",
|
||||
"TextMultiSave"
|
||||
],
|
||||
{
|
||||
"author": "kierdran",
|
||||
"description": "Tools for agentic testing",
|
||||
"nickname": "ai_tools",
|
||||
"title": "AI_Tools",
|
||||
"title_aux": "ComfyUI-AI_Tools [UNSAFE]"
|
||||
}
|
||||
],
|
||||
"https://github.com/quinteroac/comfyui_api_executor_nodes": [
|
||||
[
|
||||
"AnyTo",
|
||||
@ -12599,6 +12491,7 @@
|
||||
"Seed 32-bit [Eclipse]",
|
||||
"Seed [Eclipse]",
|
||||
"Show Any [Eclipse]",
|
||||
"Show Text [Eclipse]",
|
||||
"Smart Detection [Eclipse]",
|
||||
"Smart Detection [SML]",
|
||||
"Smart Folder [Eclipse]",
|
||||
@ -12869,12 +12762,18 @@
|
||||
"Canny Edge",
|
||||
"Combine RGB Channels",
|
||||
"Create Empty Frames",
|
||||
"Crop Guide Frames",
|
||||
"Get Image Dimensions",
|
||||
"Image Grayscale",
|
||||
"LTXVMultiKeyframeGuide",
|
||||
"LTXVMultiLatentGuide",
|
||||
"Load Image Folder",
|
||||
"Load Images",
|
||||
"Load Images From List",
|
||||
"Pad Batch to 4n+1",
|
||||
"Pad Batch to kn+1",
|
||||
"Repeat Frames",
|
||||
"Resample Frames",
|
||||
"Resize Frame",
|
||||
"Save Image Folder",
|
||||
"Select Image From Batch",
|
||||
@ -13541,40 +13440,6 @@
|
||||
"title_aux": "ComfyUI-StalkerVr"
|
||||
}
|
||||
],
|
||||
"https://github.com/stalkervr/comfyui-custom-path-nodes": [
|
||||
[
|
||||
"AnyCollector",
|
||||
"ContextPipeIn",
|
||||
"ContextPipeOut",
|
||||
"ContextPipeReroute",
|
||||
"DataFileLoader",
|
||||
"ImageAspectRatioFixer",
|
||||
"ImageBatchCrop",
|
||||
"ImageGridCropper",
|
||||
"JsonArraySplitter",
|
||||
"JsonFieldRemover",
|
||||
"JsonFieldReplaceAdvanced",
|
||||
"JsonFieldValueExtractor",
|
||||
"JsonPathLoader",
|
||||
"JsonPromptToTextPromptConverter",
|
||||
"JsonToString",
|
||||
"ListItemExtractor",
|
||||
"LoopAny",
|
||||
"PathPipeIn",
|
||||
"PathPipeOut",
|
||||
"PathPipeReroute",
|
||||
"PromptPartJoin",
|
||||
"SavePath",
|
||||
"StringCollector",
|
||||
"StringConcatenation",
|
||||
"StringListToString",
|
||||
"StringWrapper",
|
||||
"WanVideoMultiPrompt"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-custom-path-nodes [UNSAFE]"
|
||||
}
|
||||
],
|
||||
"https://github.com/starsFriday/ComfyUI-Audio-Subtitle": [
|
||||
[
|
||||
"AudioSubtitle"
|
||||
@ -13765,7 +13630,8 @@
|
||||
"Supaidauen_Text_Concat",
|
||||
"Supaidauen_Text_Replace",
|
||||
"Supaidauen_Text_Wildcard",
|
||||
"Supaidauen_Text_w_Options_Replace_LoRA"
|
||||
"Supaidauen_Text_w_Options_Replace_LoRA",
|
||||
"Supaidauen_ZippedPromptFromTextAdvanced"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-supaidauen [WIP]"
|
||||
@ -13944,14 +13810,6 @@
|
||||
"title_aux": "mc_audio"
|
||||
}
|
||||
],
|
||||
"https://github.com/tfernd/ComfyUI-AutoCPUOffload": [
|
||||
[
|
||||
"AutoCPUOffload"
|
||||
],
|
||||
{
|
||||
"title_aux": "Auto CPU Offload for ComfyUI [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/tg-tjmitchell/comfyui-custom-node-lister": [
|
||||
[
|
||||
"CustomNodeLister"
|
||||
@ -15052,20 +14910,6 @@
|
||||
"title_aux": "ComfyUI-SEQLToolNode"
|
||||
}
|
||||
],
|
||||
"https://github.com/yojimbodayne/ComfyUI-Dropbox-API": [
|
||||
[
|
||||
"FetchTokenFromDropbox",
|
||||
"PostImagesToDropboxAPI",
|
||||
"PostPromptsToDropboxAPI",
|
||||
"PullImagesFromDropboxAPI",
|
||||
"PullTextFromDropboxAPI",
|
||||
"PullVideosFromDropboxAPI",
|
||||
"VideoCombineAndExportToDropboxAPI"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Dropbox-API [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/yuvraj108c/ComfyUI-HYPIR": [
|
||||
[
|
||||
"HYPIRProcess",
|
||||
@ -15223,6 +15067,7 @@
|
||||
"MultiLineOperationZV",
|
||||
"PatternFillNodeZV",
|
||||
"ProductionDisplacementMapNodeZV",
|
||||
"PromptSelectorWithTimeoutZV",
|
||||
"RandomSelectListZV",
|
||||
"SaveImageToPathZV",
|
||||
"SaveTxtToPathZV",
|
||||
@ -15231,6 +15076,7 @@
|
||||
"TxtCounterNodeZV",
|
||||
"UniversalBBOXToMaskZV",
|
||||
"Veo31Image2VideoSubmitZV",
|
||||
"VideoCounterNodeZV",
|
||||
"VideoGeneratorFFmpegZV",
|
||||
"VideoSceneDetectorZV",
|
||||
"VideoSpeedZV",
|
||||
@ -15255,21 +15101,6 @@
|
||||
"title_aux": "ComfyUI-prompt-library"
|
||||
}
|
||||
],
|
||||
"https://github.com/zinigo-creations/comfyui-prompt-builder": [
|
||||
[
|
||||
"ActionNode",
|
||||
"CharacterNode",
|
||||
"CombinePromptNode",
|
||||
"CompositionNode",
|
||||
"EnvironmentNode",
|
||||
"NSFWNode",
|
||||
"PresetCharacterNode",
|
||||
"StylePresetNode"
|
||||
],
|
||||
{
|
||||
"title_aux": "Prompt Builder [NAME CONFLICT]"
|
||||
}
|
||||
],
|
||||
"https://github.com/zjkhurry/comfyui_MetalFX": [
|
||||
[
|
||||
"metalFXImg"
|
||||
@ -15315,14 +15146,6 @@
|
||||
"title_aux": "ComfyUI Stash"
|
||||
}
|
||||
],
|
||||
"https://raw.githubusercontent.com/jp0215/comfyUI_padding-resize_node/main/PaddingNode.py": [
|
||||
[
|
||||
"function"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyUI_padding-resize_node"
|
||||
}
|
||||
],
|
||||
"https://raw.githubusercontent.com/komojini/ComfyUI_Prompt_Template_CustomNodes/main/prompt_with_template.py": [
|
||||
[
|
||||
"ObjectPromptWithTemplate",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,175 @@
|
||||
{
|
||||
"custom_nodes": [
|
||||
{
|
||||
"author": "yojimbodayne",
|
||||
"title": "ComfyUI-Dropbox-API [WIP] [REMOVED]",
|
||||
"reference": "https://github.com/yojimbodayne/ComfyUI-Dropbox-API",
|
||||
"files": [
|
||||
"https://github.com/yojimbodayne/ComfyUI-Dropbox-API"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This custom nodepackage for ComfyUI allows users to interact with Dropbox API, enabling image, text, and video uploads, downloads, and management directly from ComfyUI workflows.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "tfernd",
|
||||
"title": "Auto CPU Offload for ComfyUI [WIP] [REMOVED]",
|
||||
"reference": "https://github.com/tfernd/ComfyUI-AutoCPUOffload",
|
||||
"files": [
|
||||
"https://github.com/tfernd/ComfyUI-AutoCPUOffload"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This extension introduces an 'Auto CPU Offload' node designed to reduce GPU VRAM usage by automatically offloading model components to the CPU. It intelligently manages the movement of model layers between the GPU and CPU, aiming to keep only the necessary parts in VRAM during inference."
|
||||
},
|
||||
{
|
||||
"author": "stalkervr",
|
||||
"title": "Custom Path Nodes for ComfyUI [UNSAFE] [REMOVED]",
|
||||
"reference": "https://github.com/stalkervr/comfyui-custom-path-nodes",
|
||||
"files": [
|
||||
"https://github.com/stalkervr/comfyui-custom-path-nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes for path handling and image cropping.[w/This nodepack contains a node that has a vulnerability allowing access to arbitrary file paths.]"
|
||||
},
|
||||
{
|
||||
"author": "Charonartist",
|
||||
"title": "ComfyUI-send-eagle-pro [REMOVED]",
|
||||
"reference": "https://github.com/Charonartist/ComfyUI-send-eagle-pro_2",
|
||||
"files": [
|
||||
"https://github.com/Charonartist/ComfyUI-send-eagle-pro_2"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Eagle integration extension node for ComfyUI (Pro version)"
|
||||
},
|
||||
{
|
||||
"author": "Charonartist",
|
||||
"title": "ComfyUI LoRA Random Selector [REMOVED]",
|
||||
"reference": "https://github.com/Charonartist/comfyui-lora-random-selector",
|
||||
"files": [
|
||||
"https://github.com/Charonartist/comfyui-lora-random-selector"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: WanMoeKSampler, WanMoeKSamplerAdvanced"
|
||||
},
|
||||
{
|
||||
"author": "bpmpnaito",
|
||||
"title": "comfyui-imageviewer [REMOVED]",
|
||||
"reference": "https://github.com/bpmpnaito/comfyui-imageviewer",
|
||||
"files": [
|
||||
"https://github.com/bpmpnaito/comfyui-imageviewer"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Image viewer node that displays preview of images directly in the node."
|
||||
},
|
||||
{
|
||||
"author": "leonardomiramondi",
|
||||
"title": "Flux Context ComfyUI Node [REMOVED]",
|
||||
"reference": "https://github.com/leonardomiramondi/flux-context-comfyui",
|
||||
"files": [
|
||||
"https://github.com/leonardomiramondi/flux-context-comfyui"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI node for Flux Context (Kontext) image editing"
|
||||
},
|
||||
{
|
||||
"author": "Charonartist",
|
||||
"title": "comfyui-lmstudio-conversation [REMOVED]",
|
||||
"reference": "https://github.com/Charonartist/comfyui-lmstudio-conversation",
|
||||
"files": [
|
||||
"https://github.com/Charonartist/comfyui-lmstudio-conversation"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for LM Studio integration with conversation history support "
|
||||
},
|
||||
{
|
||||
"author": "Charonartist",
|
||||
"title": "comfyui-last-frame-extractor [REMOVED]",
|
||||
"reference": "https://github.com/Charonartist/comfyui-last-frame-extractor",
|
||||
"files": [
|
||||
"https://github.com/Charonartist/comfyui-last-frame-extractor"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This is a ComfyUI custom node that extracts the last frame (image) from an input image batch. It is particularly useful when you want to obtain the final scene or frame in a video generation workflow."
|
||||
},
|
||||
{
|
||||
"author": "Charonartist",
|
||||
"title": "ComfyUI Tag Remover [REMOVED]",
|
||||
"reference": "https://github.com/Charonartist/comfyui-tag-remover",
|
||||
"files": [
|
||||
"https://github.com/Charonartist/comfyui-tag-remover"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node for removing specified tags and their content from text"
|
||||
},
|
||||
{
|
||||
"author": "Charonartist",
|
||||
"title": "ComfyUI Smart Resize Node [REMOVED]",
|
||||
"reference": "https://github.com/Charonartist/comfyui-smart-resize-node",
|
||||
"files": [
|
||||
"https://github.com/Charonartist/comfyui-smart-resize-node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Smart resize node for ComfyUI that handles portrait/landscape images with short/long side specification"
|
||||
},
|
||||
{
|
||||
"author": "Charonartist",
|
||||
"title": "ComfyUI Auto LoRA [REMOVED]",
|
||||
"reference": "https://github.com/Charonartist/comfyui-auto-lora-v2",
|
||||
"files": [
|
||||
"https://github.com/Charonartist/comfyui-auto-lora-v2"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This is a ComfyUI custom node that automatically detects trigger words from text prompts and applies the corresponding LoRA models."
|
||||
},
|
||||
{
|
||||
"author": "qlikpetersen",
|
||||
"title": "ComfyUI-AI_Tools [UNSAFE] [REMOVED]",
|
||||
"reference": "https://github.com/qlikpetersen/ComfyUI-AI_Tools",
|
||||
"files": [
|
||||
"https://github.com/qlikpetersen/ComfyUI-AI_Tools"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: DoLogin, HttpRequest, Json2String, String2Json, CreateListString, CreateListJSON, Query_OpenAI, Image_Attachment, JSON_Attachment, String_Attachment, RunPython\n[w/This nodepack contains a node with a vulnerability that allows arbitrary code execution.]"
|
||||
},
|
||||
{
|
||||
"author": "AiSatan",
|
||||
"title": "ComfyUI_CSM [NAME CONFLICT] [REMOVED]",
|
||||
"reference": "https://github.com/AiSatan/ComfyUI_CSM",
|
||||
"files": [
|
||||
"https://github.com/AiSatan/ComfyUI_CSM"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI node for the CSM model featuring text-to-speech, voice cloning, and automatic model downloading from Hugging Face."
|
||||
},
|
||||
{
|
||||
"author": "shiertier",
|
||||
"title": "ComfyUI-TeaCache-Lumina [REMOVED]",
|
||||
"reference": "https://github.com/shiertier/ComfyUI-TeaCache-lumina2",
|
||||
"files": [
|
||||
"https://github.com/shiertier/ComfyUI-TeaCache-lumina2"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI Node Implementation: TeaCache Acceleration Specifically Designed for the Lumina Model"
|
||||
},
|
||||
{
|
||||
"author": "Daniel Lewis",
|
||||
"title": "ComfyUI-TTS [REMOVED]",
|
||||
"reference": "https://github.com/daniel-lewis-ab/ComfyUI-TTS",
|
||||
"files": [
|
||||
"https://github.com/daniel-lewis-ab/ComfyUI-TTS"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Text To Speech (TTS) for ComfyUI"
|
||||
},
|
||||
{
|
||||
"author": "Daniel Lewis",
|
||||
"title": "ComfyUI-Llama [REMOVED]",
|
||||
"reference": "https://github.com/daniel-lewis-ab/ComfyUI-Llama",
|
||||
"files": [
|
||||
"https://github.com/daniel-lewis-ab/ComfyUI-Llama"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This is a set of nodes to interact with llama-cpp-python"
|
||||
},
|
||||
{
|
||||
"author": "Solarish",
|
||||
"title": "fyUI-MidnightLook [REMOVED]",
|
||||
|
||||
@ -1,5 +1,385 @@
|
||||
{
|
||||
"custom_nodes": [
|
||||
{
|
||||
"author": "artemko7v",
|
||||
"title": "ComfyUI Complex Prompt Nodes",
|
||||
"reference": "https://github.com/ArtemKo7v/ComfyUI-Complex-Prompt",
|
||||
"files": [
|
||||
"https://github.com/ArtemKo7v/ComfyUI-Complex-Prompt"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI node for working with complex prompts with support for variables, randomness, and basic logic."
|
||||
},
|
||||
{
|
||||
"author": "orion4d",
|
||||
"title": "Orion4D_AutoCachedPreview",
|
||||
"reference": "https://github.com/orion4d/Orion4D_AutoCachedPreview",
|
||||
"files": [
|
||||
"https://github.com/orion4d/Orion4D_AutoCachedPreview"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom node for ComfyUI that allows you to cache an image and its mask to avoid recalculating upstream steps in your workflow."
|
||||
},
|
||||
{
|
||||
"author": "alikonfilms",
|
||||
"title": "comfyui-alikonfilms",
|
||||
"reference": "https://github.com/alikonfilms/comfyui_alikonfilms",
|
||||
"files": [
|
||||
"https://github.com/alikonfilms/comfyui_alikonfilms"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A CLIP text encoder with 18 cinematic camera movement presets (dolly, pan, tilt, zoom, orbit and more). Subject-aware and free-camera modes, blend slider to mix your prompt with camera movements, and a live text output to preview the final prompt."
|
||||
},
|
||||
{
|
||||
"author": "mexxmillion",
|
||||
"title": "ComfyUI-VLMPrompt",
|
||||
"reference": "https://github.com/mexxmillion/ComfyUI-VLMPrompt",
|
||||
"files": [
|
||||
"https://github.com/mexxmillion/ComfyUI-VLMPrompt"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for local VLM prompt generation with GGUF and Hugging Face backends."
|
||||
},
|
||||
{
|
||||
"author": "hassan-mb",
|
||||
"title": "HB ComfyUI Nodes",
|
||||
"reference": "https://github.com/HassanEclipse/comfyui-hb-party",
|
||||
"files": [
|
||||
"https://github.com/HassanEclipse/comfyui-hb-party"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Utility nodes for ComfyUI featuring a dynamic Text Preset Switch with workflow-safe persistence and Node 2.0 support."
|
||||
},
|
||||
{
|
||||
"author": "rikanrino",
|
||||
"title": "Rikannodes",
|
||||
"reference": "https://github.com/rikanrino/Rikannodes",
|
||||
"files": [
|
||||
"https://github.com/rikanrino/Rikannodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "kijai ComfyUI-PromptRelay with fps and max frame output"
|
||||
},
|
||||
{
|
||||
"author": "Cordux",
|
||||
"title": "ComfyUI-PromptTagBuilder",
|
||||
"reference": "https://github.com/Cordux/ComfyUI-PromptTagBuilder",
|
||||
"files": [
|
||||
"https://github.com/Cordux/ComfyUI-PromptTagBuilder"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Flexible ComfyUI node that simplifies prompt building through organized dropdown categories for tag-based models."
|
||||
},
|
||||
{
|
||||
"author": "GeekatplayStudio",
|
||||
"title": "ComfyUI-cluster",
|
||||
"reference": "https://github.com/GeekatplayStudio/ComfyUI-cluster",
|
||||
"files": [
|
||||
"https://github.com/GeekatplayStudio/ComfyUI-cluster"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Ollama-driven routing nodes and curated workflows for ComfyUI with checkpoint, LoRA, and Flux split-component flows plus image-guided variants using vision analysis."
|
||||
},
|
||||
{
|
||||
"author": "cowneko",
|
||||
"title": "CWK_Checkpoints_Preset_Manager",
|
||||
"reference": "https://github.com/cowneko/CWK_Checkpoints_Preset_Manager",
|
||||
"files": [
|
||||
"https://github.com/cowneko/CWK_Checkpoints_Preset_Manager"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI node combining per-model preset system with full-featured model manager, CivitAI integration, and GGUF support for browsing and organizing checkpoints."
|
||||
},
|
||||
{
|
||||
"author": "kijai",
|
||||
"title": "ComfyUI-NativeLooping_testing",
|
||||
"reference": "https://github.com/kijai/ComfyUI-NativeLooping_testing",
|
||||
"files": [
|
||||
"https://github.com/kijai/ComfyUI-NativeLooping_testing"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Temporary repository for testing candidate for native ComfyUI loop nodes. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "IA-gyz",
|
||||
"title": "comfyui-VarBoard",
|
||||
"reference": "https://github.com/IA-gyz/comfyui-VarBoard",
|
||||
"files": [
|
||||
"https://github.com/IA-gyz/comfyui-VarBoard"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Variables Board is a floating control center for ComfyUI workflows that centralizes parameters into a customizable overlay."
|
||||
},
|
||||
{
|
||||
"author": "wsq194",
|
||||
"title": "Yeban Workflow Manager",
|
||||
"reference": "https://github.com/wsq194/yeban-workflow-manager",
|
||||
"files": [
|
||||
"https://github.com/wsq194/yeban-workflow-manager"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI workflow manager plugin with auto-save, version history, sidebar integration and more."
|
||||
},
|
||||
{
|
||||
"author": "nekodificador",
|
||||
"title": "NKD Klein Tools",
|
||||
"reference": "https://github.com/Nekodificador/ComfyUI-NKD-Klein-Tools",
|
||||
"files": [
|
||||
"https://github.com/Nekodificador/ComfyUI-NKD-Klein-Tools"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NKD Klein Presampling and Postsampling nodes for Flux Klein workflows in ComfyUI"
|
||||
},
|
||||
{
|
||||
"author": "szymonj",
|
||||
"title": "LoRA Range Loader",
|
||||
"reference": "https://github.com/esp-dev/comfyui-lora-range-loader",
|
||||
"files": [
|
||||
"https://github.com/esp-dev/comfyui-lora-range-loader"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node: load a LoRA from current selection and automatically advance current within a first/last filename range."
|
||||
},
|
||||
{
|
||||
"author": "brosequist",
|
||||
"title": "comfyui-pipeline-barrier",
|
||||
"reference": "https://github.com/brosequist/ComfyUI-PipelineBarrier",
|
||||
"files": [
|
||||
"https://github.com/brosequist/ComfyUI-PipelineBarrier"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI node that force-flushes GPU caches between pipeline stages to prevent OOM kills"
|
||||
},
|
||||
{
|
||||
"author": "artemko7v",
|
||||
"title": "ComfyUI Prompt Enhance Nodes",
|
||||
"reference": "https://github.com/ArtemKo7v/ComfyUI-Prompt-Magic",
|
||||
"files": [
|
||||
"https://github.com/ArtemKo7v/ComfyUI-Prompt-Magic"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI prompt enhance nodes and string utilities"
|
||||
},
|
||||
{
|
||||
"author": "mitch-avis",
|
||||
"title": "ComfyUI-HoldCounter",
|
||||
"reference": "https://github.com/mitch-avis/ComfyUI-HoldCounter",
|
||||
"files": [
|
||||
"https://github.com/mitch-avis/ComfyUI-HoldCounter"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node that emits a held, range-bound integer index with multiple advancement modes (loop, clamp, pingpong, random, shuffle) — useful as a Load Image batch index that advances every N runs."
|
||||
},
|
||||
{
|
||||
"author": "capacap",
|
||||
"title": "ComfyUI-Selective-Sigma-Detailer",
|
||||
"reference": "https://github.com/Capacap/ComfyUI-Selective-Sigma-Detailer",
|
||||
"files": [
|
||||
"https://github.com/Capacap/ComfyUI-Selective-Sigma-Detailer"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI sampler that boosts detail only in latent regions that are already dense at the moment the schedule activates."
|
||||
},
|
||||
{
|
||||
"author": "xav",
|
||||
"title": "XAV Anima Style Selector",
|
||||
"reference": "https://github.com/XAV-Games/comfyui-xav-anima-style-selector",
|
||||
"files": [
|
||||
"https://github.com/XAV-Games/comfyui-xav-anima-style-selector"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes for quick and easy style selection for the Anima model"
|
||||
},
|
||||
{
|
||||
"author": "xxchinenxx",
|
||||
"title": "Qwen Clothing Selector",
|
||||
"reference": "https://github.com/xxchinenxx/ComfyUI-QwenClothingSelector",
|
||||
"files": [
|
||||
"https://github.com/xxchinenxx/ComfyUI-QwenClothingSelector"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for Qwen-Image-Edit outfit/clothing edits — toggles, presets, and identity-preserving prompt builders. Useful for fashion edits, costume changes, and outfit swaps."
|
||||
},
|
||||
{
|
||||
"author": "halr9000",
|
||||
"title": "Procgen 9000",
|
||||
"reference": "https://github.com/halr9000/procgen9000",
|
||||
"files": [
|
||||
"https://github.com/halr9000/procgen9000"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Procedural image generation toolkit designed as input to image edit workflows."
|
||||
},
|
||||
{
|
||||
"author": "amrnidal999-tech",
|
||||
"title": "Realisim Enhancor",
|
||||
"reference": "https://github.com/amrnidal999-tech/comfyui-realisim-enhancor",
|
||||
"files": [
|
||||
"https://github.com/amrnidal999-tech/comfyui-realisim-enhancor"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI image enhancement node with JPEG degradation, noise, blur, sharpening, contrast, and color controls."
|
||||
},
|
||||
{
|
||||
"author": "xmarre",
|
||||
"title": "ComfyUI-TIDE",
|
||||
"reference": "https://github.com/xmarre/ComfyUI-TIDE",
|
||||
"files": [
|
||||
"https://github.com/xmarre/ComfyUI-TIDE"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node implementing TIDE (Text-Informed Dynamic Extrapolation with Step-Aware Temperature Control) for diffusion models."
|
||||
},
|
||||
{
|
||||
"author": "xmarre",
|
||||
"title": "ComfyUI-DiffAid-Patches",
|
||||
"reference": "https://github.com/xmarre/ComfyUI-DiffAid-Patches",
|
||||
"files": [
|
||||
"https://github.com/xmarre/ComfyUI-DiffAid-Patches"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node pack implementing Diff-Aid-inspired inference-time text-conditioning patches for Flux and SDXL models."
|
||||
},
|
||||
{
|
||||
"author": "wos-ai-studio",
|
||||
"title": "ComfyUI-Title-Memo",
|
||||
"reference": "https://github.com/xujianjian2004/ComfyUI-Title-Memo",
|
||||
"files": [
|
||||
"https://github.com/xujianjian2004/ComfyUI-Title-Memo"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A lightweight ComfyUI canvas annotation node with rich styling, built-in presets, and custom presets."
|
||||
},
|
||||
{
|
||||
"author": "takkun",
|
||||
"title": "ComfyUI-StepByStep-Sampler",
|
||||
"reference": "https://github.com/TakkunRed/ComfyUI-StepByStep-Sampler",
|
||||
"files": [
|
||||
"https://github.com/TakkunRed/ComfyUI-StepByStep-Sampler"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI StepByStep Sampler is a plugin for ComfyUI that provides a step-by-step sampling method for image generation. It allows users to generate images in a more controlled and iterative manner, making it easier to achieve desired results."
|
||||
},
|
||||
{
|
||||
"author": "marduk191",
|
||||
"title": "comfyui-nucleus",
|
||||
"reference": "https://github.com/marduk191/comfyui-nucleus",
|
||||
"files": [
|
||||
"https://github.com/marduk191/comfyui-nucleus"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nucleus Image (MoE diffusion) support for ComfyUI — backport of PR #13471"
|
||||
},
|
||||
{
|
||||
"author": "ussaaron",
|
||||
"title": "FrameFuse",
|
||||
"reference": "https://github.com/headline-design/comfyui-framefuse",
|
||||
"files": [
|
||||
"https://github.com/headline-design/comfyui-framefuse"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes for stitching a still frame onto the start or end of an IMAGE video batch and trimming extra tail frames with optional audio sync alignment."
|
||||
},
|
||||
{
|
||||
"author": "eniewold",
|
||||
"title": "Subworkflow (reusable workflows)",
|
||||
"reference": "https://github.com/eniewold/ComfyUI-Subworkflow",
|
||||
"files": [
|
||||
"https://github.com/eniewold/ComfyUI-Subworkflow"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Use ComfyUI workflows as reusable subworkflows via Subworkflow Input, Subworkflow Output, and Subworkflow nodes"
|
||||
},
|
||||
{
|
||||
"author": "machinedelusions",
|
||||
"title": "ComfyUI-FL-LTXTools",
|
||||
"reference": "https://github.com/filliptm/ComfyUI-FL-LTXTools",
|
||||
"files": [
|
||||
"https://github.com/filliptm/ComfyUI-FL-LTXTools"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Experimental tools and motion controls for LTX-Video in ComfyUI"
|
||||
},
|
||||
{
|
||||
"author": "serhiiyashyn-sf",
|
||||
"title": "Face-Aligned Center",
|
||||
"reference": "https://github.com/serhiiyashyn-sf/comfyui-face-aligned-center",
|
||||
"files": [
|
||||
"https://github.com/serhiiyashyn-sf/comfyui-face-aligned-center"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Batch-aware character centering for ComfyUI. Given a character sheet (multiple angles), scales every image so the face ends up at the same size and canvas position — including back-view angles, via a silhouette fallback tied to the batch's face scale. Includes a Fine-Tune node for per-image zoom/nudge with a live canvas preview, and an Anime Face Detect node for crop+mask using lbpcascade_animeface."
|
||||
},
|
||||
{
|
||||
"author": "amortegui84",
|
||||
"title": "Tile Upscale NB2",
|
||||
"reference": "https://github.com/amortegui84/comfyui-tile-upscale-nb2",
|
||||
"files": [
|
||||
"https://github.com/amortegui84/comfyui-tile-upscale-nb2"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Tile-based upscaling nodes for ComfyUI — Nano Banana 2 compatible"
|
||||
},
|
||||
{
|
||||
"author": "dorpxam",
|
||||
"title": "LTX-2 Microscope",
|
||||
"reference": "https://github.com/dorpxam/ComfyUI-LTX2-Microscope",
|
||||
"files": [
|
||||
"https://github.com/dorpxam/ComfyUI-LTX2-Microscope"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "48-Layers Latent Previewer for Lightrick's LTX-2 model."
|
||||
},
|
||||
{
|
||||
"author": "enviral-design",
|
||||
"title": "Enviral Design Node Pack",
|
||||
"reference": "https://github.com/EnviralDesign/comfyUI-enviral-design-node-pack",
|
||||
"files": [
|
||||
"https://github.com/EnviralDesign/comfyUI-enviral-design-node-pack"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Small, dependency-light ComfyUI utility nodes from Enviral Design."
|
||||
},
|
||||
{
|
||||
"author": "newgrit1004",
|
||||
"title": "Qwen3 Triton TTS",
|
||||
"reference": "https://github.com/newgrit1004/ComfyUI-Qwen3-TTS-Triton",
|
||||
"files": [
|
||||
"https://github.com/newgrit1004/ComfyUI-Qwen3-TTS-Triton"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI node wrapping qwen3-tts-triton for 7-mode Qwen3-TTS inference (Triton kernel fusion + TurboQuant KV cache)"
|
||||
},
|
||||
{
|
||||
"author": "intelliprompt",
|
||||
"title": "comfy-intelliprompt",
|
||||
"reference": "https://github.com/galpt/comfy-intelliPrompt",
|
||||
"files": [
|
||||
"https://github.com/galpt/comfy-intelliPrompt"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "intelliPrompt - An intelligent prompt optimizer for ComfyUI that fixes typos, balances parentheses, and enhances prompts"
|
||||
},
|
||||
{
|
||||
"author": "mahilkr",
|
||||
"title": "HunyuanWorld 3D World Generation",
|
||||
"reference": "https://github.com/krmahil/comfyui-hunyuan-world",
|
||||
"files": [
|
||||
"https://github.com/krmahil/comfyui-hunyuan-world"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for immersive 3D world generation using Tencent HunyuanWorld 1.0"
|
||||
},
|
||||
{
|
||||
"author": "dailydoseofaiart",
|
||||
"title": "ComfyUI-FPSFrameDrop",
|
||||
"reference": "https://github.com/dailydoseofaiart/ComfyUI-FPSFrameDrop",
|
||||
"files": [
|
||||
"https://github.com/dailydoseofaiart/ComfyUI-FPSFrameDrop"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A node to drop frames from the output images to force the video to a lower FPS at the same playback speed."
|
||||
},
|
||||
{
|
||||
"author": "comfyui-attic",
|
||||
"title": "External LoRA Loader",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
217
openapi.yaml
217
openapi.yaml
@ -191,11 +191,20 @@ paths:
|
||||
description: Mapping of node packages to node classes
|
||||
|
||||
/customnode/fetch_updates:
|
||||
get:
|
||||
post:
|
||||
summary: Check for updates
|
||||
description: Fetches updates for custom nodes
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/modeParam'
|
||||
requestBody:
|
||||
required: false
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
mode:
|
||||
type: string
|
||||
enum: [local, remote, default]
|
||||
description: Source mode (e.g., "local", "remote")
|
||||
responses:
|
||||
'200':
|
||||
description: No updates available
|
||||
@ -423,13 +432,22 @@ paths:
|
||||
|
||||
# Queue Management Endpoints
|
||||
/manager/queue/update_all:
|
||||
get:
|
||||
post:
|
||||
summary: Update all custom nodes
|
||||
description: Queues update operations for all installed custom nodes
|
||||
security:
|
||||
- securityLevel: []
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/modeParam'
|
||||
requestBody:
|
||||
required: false
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
mode:
|
||||
type: string
|
||||
enum: [local, remote, default]
|
||||
description: Source mode (e.g., "local", "remote")
|
||||
responses:
|
||||
'200':
|
||||
description: Update queued successfully
|
||||
@ -439,7 +457,7 @@ paths:
|
||||
description: Security policy violation
|
||||
|
||||
/manager/queue/reset:
|
||||
get:
|
||||
post:
|
||||
summary: Reset queue
|
||||
description: Resets the operation queue
|
||||
responses:
|
||||
@ -479,7 +497,7 @@ paths:
|
||||
description: Target node not found or security issue
|
||||
|
||||
/manager/queue/start:
|
||||
get:
|
||||
post:
|
||||
summary: Start queue processing
|
||||
description: Starts processing the operation queue
|
||||
responses:
|
||||
@ -575,7 +593,7 @@ paths:
|
||||
description: Disable operation queued successfully
|
||||
|
||||
/manager/queue/update_comfyui:
|
||||
get:
|
||||
post:
|
||||
summary: Update ComfyUI
|
||||
description: Queues an update operation for ComfyUI itself
|
||||
responses:
|
||||
@ -621,13 +639,22 @@ paths:
|
||||
$ref: '#/components/schemas/SnapshotItem'
|
||||
|
||||
/snapshot/remove:
|
||||
get:
|
||||
post:
|
||||
summary: Remove snapshot
|
||||
description: Removes a specified snapshot
|
||||
security:
|
||||
- securityLevel: []
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/targetParam'
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: [target]
|
||||
properties:
|
||||
target:
|
||||
type: string
|
||||
description: Target identifier
|
||||
responses:
|
||||
'200':
|
||||
description: Snapshot removed successfully
|
||||
@ -637,13 +664,22 @@ paths:
|
||||
description: Security policy violation
|
||||
|
||||
/snapshot/restore:
|
||||
get:
|
||||
post:
|
||||
summary: Restore snapshot
|
||||
description: Restores a specified snapshot
|
||||
security:
|
||||
- securityLevel: []
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/targetParam'
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: [target]
|
||||
properties:
|
||||
target:
|
||||
type: string
|
||||
description: Target identifier
|
||||
responses:
|
||||
'200':
|
||||
description: Snapshot restoration scheduled
|
||||
@ -667,7 +703,7 @@ paths:
|
||||
description: Error creating snapshot
|
||||
|
||||
/snapshot/save:
|
||||
get:
|
||||
post:
|
||||
summary: Save snapshot
|
||||
description: Saves the current system state as a new snapshot
|
||||
responses:
|
||||
@ -699,15 +735,19 @@ paths:
|
||||
description: Error retrieving versions
|
||||
|
||||
/comfyui_manager/comfyui_switch_version:
|
||||
get:
|
||||
post:
|
||||
summary: Switch ComfyUI version
|
||||
description: Switches to a specified ComfyUI version
|
||||
parameters:
|
||||
- name: ver
|
||||
in: query
|
||||
description: Target version
|
||||
schema:
|
||||
type: string
|
||||
requestBody:
|
||||
required: false
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
ver:
|
||||
type: string
|
||||
description: Target version
|
||||
responses:
|
||||
'200':
|
||||
description: Version switch successful
|
||||
@ -715,7 +755,7 @@ paths:
|
||||
description: Error switching version
|
||||
|
||||
/manager/reboot:
|
||||
get:
|
||||
post:
|
||||
summary: Reboot ComfyUI
|
||||
description: Restarts the ComfyUI server
|
||||
security:
|
||||
@ -746,7 +786,32 @@ paths:
|
||||
text/plain:
|
||||
schema:
|
||||
type: string
|
||||
|
||||
post:
|
||||
summary: Set preview method
|
||||
description: Sets the latent preview method (write-only; use GET to read)
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: [value]
|
||||
properties:
|
||||
value:
|
||||
type: string
|
||||
enum: [auto, latent2rgb, taesd, none]
|
||||
description: New preview method
|
||||
responses:
|
||||
'200':
|
||||
description: Setting updated
|
||||
content:
|
||||
text/plain:
|
||||
schema:
|
||||
type: string
|
||||
'400':
|
||||
description: Invalid value
|
||||
|
||||
|
||||
/manager/db_mode:
|
||||
get:
|
||||
summary: Get or set database mode
|
||||
@ -766,7 +831,32 @@ paths:
|
||||
text/plain:
|
||||
schema:
|
||||
type: string
|
||||
|
||||
post:
|
||||
summary: Set database mode
|
||||
description: Sets the database mode (write-only; use GET to read)
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: [value]
|
||||
properties:
|
||||
value:
|
||||
type: string
|
||||
enum: [channel, local, remote]
|
||||
description: New database mode
|
||||
responses:
|
||||
'200':
|
||||
description: Setting updated
|
||||
content:
|
||||
text/plain:
|
||||
schema:
|
||||
type: string
|
||||
'400':
|
||||
description: Invalid value
|
||||
|
||||
|
||||
/manager/policy/component:
|
||||
get:
|
||||
summary: Get or set component policy
|
||||
@ -785,7 +875,29 @@ paths:
|
||||
text/plain:
|
||||
schema:
|
||||
type: string
|
||||
|
||||
post:
|
||||
summary: Set component policy
|
||||
description: Sets the component policy (write-only; use GET to read)
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: [value]
|
||||
properties:
|
||||
value:
|
||||
type: string
|
||||
description: New component policy
|
||||
responses:
|
||||
'200':
|
||||
description: Setting updated
|
||||
content:
|
||||
text/plain:
|
||||
schema:
|
||||
type: string
|
||||
|
||||
|
||||
/manager/policy/update:
|
||||
get:
|
||||
summary: Get or set update policy
|
||||
@ -805,7 +917,32 @@ paths:
|
||||
text/plain:
|
||||
schema:
|
||||
type: string
|
||||
|
||||
post:
|
||||
summary: Set update policy
|
||||
description: Sets the update policy (write-only; use GET to read)
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: [value]
|
||||
properties:
|
||||
value:
|
||||
type: string
|
||||
enum: [stable, nightly, nightly-comfyui]
|
||||
description: New update policy
|
||||
responses:
|
||||
'200':
|
||||
description: Setting updated
|
||||
content:
|
||||
text/plain:
|
||||
schema:
|
||||
type: string
|
||||
'400':
|
||||
description: Invalid value
|
||||
|
||||
|
||||
/manager/channel_url_list:
|
||||
get:
|
||||
summary: Get or set channel URL
|
||||
@ -836,7 +973,29 @@ paths:
|
||||
type: string
|
||||
url:
|
||||
type: string
|
||||
|
||||
post:
|
||||
summary: Set channel URL
|
||||
description: Sets the channel URL for custom node sources (write-only; use GET to read current + list)
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: [value]
|
||||
properties:
|
||||
value:
|
||||
type: string
|
||||
description: New channel name
|
||||
responses:
|
||||
'200':
|
||||
description: Setting updated
|
||||
content:
|
||||
text/plain:
|
||||
schema:
|
||||
type: string
|
||||
|
||||
|
||||
# Component Management Endpoints
|
||||
/manager/component/save:
|
||||
post:
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
[project]
|
||||
name = "comfyui-manager"
|
||||
description = "ComfyUI-Manager provides features to install and manage custom nodes for ComfyUI, as well as various functionalities to assist with ComfyUI."
|
||||
version = "3.39.3"
|
||||
version = "3.40"
|
||||
license = { file = "LICENSE.txt" }
|
||||
dependencies = ["GitPython", "PyGithub", "matrix-nio", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions", "toml", "uv", "chardet"]
|
||||
|
||||
|
||||
121
tests/test_csrf_content_type_helper.py
Normal file
121
tests/test_csrf_content_type_helper.py
Normal file
@ -0,0 +1,121 @@
|
||||
"""AC verification for wi-001 (B2): Content-Type rejection helper.
|
||||
|
||||
Validates _reject_simple_form_content_type against the 5-item curl matrix
|
||||
from the WI's acceptance criteria using aiohttp test client. The test
|
||||
builds a minimal aiohttp app that mirrors the helper's wiring into a
|
||||
no-body POST handler, so we exercise the real request.content_type
|
||||
parsing path rather than a mock.
|
||||
|
||||
AC matrix:
|
||||
form-url → 400
|
||||
multipart → 400
|
||||
text/plain → 400
|
||||
no-CT → 200
|
||||
application/json → 200
|
||||
"""
|
||||
import asyncio
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
from aiohttp import web
|
||||
from aiohttp.test_utils import TestClient, TestServer
|
||||
|
||||
|
||||
# Parse the helper from manager_server.py without importing it, to avoid
|
||||
# pulling in the full ComfyUI/PromptServer stack. Note: we intentionally do
|
||||
# NOT add the `glob/` directory to sys.path — the dir name would shadow
|
||||
# Python's stdlib `glob` module and break pytest collection.
|
||||
REPO_ROOT = Path(__file__).resolve().parent.parent
|
||||
|
||||
|
||||
def _load_helper():
|
||||
"""Parse manager_server.py and execute only the helper definition."""
|
||||
import ast
|
||||
|
||||
source = (REPO_ROOT / "glob" / "manager_server.py").read_text()
|
||||
tree = ast.parse(source)
|
||||
wanted = {"_SIMPLE_FORM_CONTENT_TYPES", "_reject_simple_form_content_type"}
|
||||
nodes = []
|
||||
for node in tree.body:
|
||||
if isinstance(node, ast.Assign):
|
||||
for target in node.targets:
|
||||
if isinstance(target, ast.Name) and target.id in wanted:
|
||||
nodes.append(node)
|
||||
elif isinstance(node, ast.FunctionDef) and node.name in wanted:
|
||||
nodes.append(node)
|
||||
module = ast.Module(body=nodes, type_ignores=[])
|
||||
ns = {"web": web, "frozenset": frozenset}
|
||||
exec(compile(module, "manager_server_helpers", "exec"), ns)
|
||||
return ns["_reject_simple_form_content_type"]
|
||||
|
||||
|
||||
_reject_simple_form_content_type = _load_helper()
|
||||
|
||||
|
||||
async def _handler(request):
|
||||
resp = _reject_simple_form_content_type(request)
|
||||
if resp is not None:
|
||||
return resp
|
||||
return web.Response(status=200)
|
||||
|
||||
|
||||
class ContentTypeRejectionTest(unittest.TestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
cls.loop = asyncio.new_event_loop()
|
||||
asyncio.set_event_loop(cls.loop)
|
||||
app = web.Application()
|
||||
app.router.add_post("/noop", _handler)
|
||||
cls.server = TestServer(app, loop=cls.loop)
|
||||
cls.client = TestClient(cls.server, loop=cls.loop)
|
||||
cls.loop.run_until_complete(cls.client.start_server())
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(cls):
|
||||
cls.loop.run_until_complete(cls.client.close())
|
||||
cls.loop.close()
|
||||
|
||||
def _post(self, headers):
|
||||
async def go():
|
||||
return await self.client.post("/noop", headers=headers, data=b"")
|
||||
|
||||
return self.loop.run_until_complete(go())
|
||||
|
||||
def test_form_urlencoded_rejected(self):
|
||||
r = self._post({"Content-Type": "application/x-www-form-urlencoded"})
|
||||
self.assertEqual(r.status, 400)
|
||||
|
||||
def test_multipart_form_data_rejected(self):
|
||||
# aiohttp requires a boundary for multipart; helper should still reject
|
||||
# based on the primary mimetype.
|
||||
r = self._post({"Content-Type": "multipart/form-data; boundary=xyz"})
|
||||
self.assertEqual(r.status, 400)
|
||||
|
||||
def test_text_plain_rejected(self):
|
||||
r = self._post({"Content-Type": "text/plain"})
|
||||
self.assertEqual(r.status, 400)
|
||||
|
||||
def test_no_content_type_allowed(self):
|
||||
# Explicitly strip Content-Type: aiohttp client may add a default,
|
||||
# so we use a raw request to ensure absence is tested.
|
||||
async def go():
|
||||
import aiohttp
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.post(
|
||||
self.client.make_url("/noop"),
|
||||
data=None,
|
||||
skip_auto_headers=["Content-Type"],
|
||||
) as resp:
|
||||
return resp.status
|
||||
|
||||
status = self.loop.run_until_complete(go())
|
||||
self.assertEqual(status, 200)
|
||||
|
||||
def test_application_json_allowed(self):
|
||||
r = self._post({"Content-Type": "application/json"})
|
||||
self.assertEqual(r.status, 200)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main(verbosity=2)
|
||||
Loading…
Reference in New Issue
Block a user