mirror of
https://github.com/Comfy-Org/ComfyUI-Manager.git
synced 2026-05-26 08:47:28 +08:00
Compare commits
1 Commits
237f98d4f0
...
ad64277f32
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ad64277f32 |
@ -3325,16 +3325,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Mel-Band RoFormer for Music Source Separation"
|
||||
},
|
||||
{
|
||||
"author": "kijai",
|
||||
"title": "ComfyUI-SCAIL-Pose",
|
||||
"reference": "https://github.com/kijai/ComfyUI-SCAIL-Pose",
|
||||
"files": [
|
||||
"https://github.com/kijai/ComfyUI-SCAIL-Pose"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes for SCAIL input processing"
|
||||
},
|
||||
{
|
||||
"author": "hhhzzyang",
|
||||
"title": "Comfyui-Lama",
|
||||
@ -4914,16 +4904,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "This extension helps generate images through NAI."
|
||||
},
|
||||
{
|
||||
"author": "bedovyy",
|
||||
"title": "ComfyUI-LLM-Helper",
|
||||
"reference": "https://github.com/bedovyy/ComfyUI-LLM-Helper",
|
||||
"files": [
|
||||
"https://github.com/bedovyy/ComfyUI-LLM-Helper"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A collection of helper nodes for working with LLM APIs in ComfyUI, intended to complement other LLM custom nodes."
|
||||
},
|
||||
{
|
||||
"author": "Off-Live",
|
||||
"title": "ComfyUI-off-suite",
|
||||
@ -5211,16 +5191,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Logical Utils (compare, string, boolean operations) for ComfyUI"
|
||||
},
|
||||
{
|
||||
"author": "aria1th",
|
||||
"title": "ComfyUI-Wildcards-rework",
|
||||
"reference": "https://github.com/aria1th/ComfyUI-Wildcards-rework",
|
||||
"files": [
|
||||
"https://github.com/aria1th/ComfyUI-Wildcards-rework"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Powerful ComfyUI custom node for dynamic prompt generation using wildcards and bracket expressions, enabling infinite variations with weighted selection, multi-picks, and nested expansion support."
|
||||
},
|
||||
{
|
||||
"author": "MitoshiroPJ",
|
||||
"title": "ComfyUI Nearsighted Attention",
|
||||
@ -8840,16 +8810,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI implementation of [a/Omost](https://github.com/lllyasviel/Omost), and everything about regional prompt.\nNOTE: You need to install ComfyUI_densediffusion to use this node."
|
||||
},
|
||||
{
|
||||
"author": "huchenlei",
|
||||
"title": "ComfyUI-execution-glow",
|
||||
"reference": "https://github.com/huchenlei/ComfyUI-execution-glow",
|
||||
"files": [
|
||||
"https://github.com/huchenlei/ComfyUI-execution-glow"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI extension that adds a glowing visual effect to nodes during execution for enhanced visual feedback."
|
||||
},
|
||||
{
|
||||
"author": "nathannlu",
|
||||
"title": "ComfyUI Pets",
|
||||
@ -9825,6 +9785,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Shuffle nodes after queue execution."
|
||||
},
|
||||
{
|
||||
"author": "shinich39",
|
||||
"title": "comfyui-innnnnpaint",
|
||||
"reference": "https://github.com/shinich39/comfyui-innnnnpaint",
|
||||
"files": [
|
||||
"https://github.com/shinich39/comfyui-innnnnpaint"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Load new workflow after mask editing."
|
||||
},
|
||||
{
|
||||
"author": "shinich39",
|
||||
"title": "comfyui-break-workflow",
|
||||
@ -13728,16 +13698,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "You'll get a new node called SD3 Latent Select Resolution, you can pick the x and y sizes from a list."
|
||||
},
|
||||
{
|
||||
"author": "GavChap",
|
||||
"title": "ComfyUI_ExtractLora",
|
||||
"reference": "https://github.com/GavChap/ComfyUI_ExtractLora",
|
||||
"files": [
|
||||
"https://github.com/GavChap/ComfyUI_ExtractLora"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Creates lora from two checkpoints by extracting the difference."
|
||||
},
|
||||
{
|
||||
"author": "BenNarum",
|
||||
"title": "SigmaWaveFormNodes",
|
||||
@ -18035,26 +17995,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes for outpainting images with diffusers, based on [a/diffusers-image-outpaint](https://huggingface.co/spaces/fffiloni/diffusers-image-outpaint/tree/main) by fffiloni."
|
||||
},
|
||||
{
|
||||
"author": "GiusTex",
|
||||
"title": "ComfyUI-Wan-TimeToMove",
|
||||
"reference": "https://github.com/GiusTex/ComfyUI-Wan-TimeToMove",
|
||||
"files": [
|
||||
"https://github.com/GiusTex/ComfyUI-Wan-TimeToMove"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Native ComfyUI port of kijai's WanVideo-Wrapper TimeToMove for video generation, currently supporting LCM sampler with frame generation capabilities. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "GiusTex",
|
||||
"title": "ComfyUI-MoreEfficientSamplers",
|
||||
"reference": "https://github.com/GiusTex/ComfyUI-MoreEfficientSamplers",
|
||||
"files": [
|
||||
"https://github.com/GiusTex/ComfyUI-MoreEfficientSamplers"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Advanced sampler nodes for ComfyUI based on efficiency-nodes, including live preview rendering and support for custom samplers with schedulers like flowmatch scheduler."
|
||||
},
|
||||
{
|
||||
"author": "CY-CHENYUE",
|
||||
"title": "ComfyUI-MiniCPM-Plus",
|
||||
@ -21880,26 +21820,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom node for ComfyUI that integrates Video-As-Prompt for motion-guided video generation from image inputs."
|
||||
},
|
||||
{
|
||||
"author": "HM-RunningHub",
|
||||
"title": "ComfyUI_RH_QwenImageI2L",
|
||||
"reference": "https://github.com/HM-RunningHub/ComfyUI_RH_QwenImageI2L",
|
||||
"files": [
|
||||
"https://github.com/HM-RunningHub/ComfyUI_RH_QwenImageI2L"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node that generates Image-to-LoRA (I2L) LoRA from training images using DiffSynth-Studio Qwen-Image i2L pipelines."
|
||||
},
|
||||
{
|
||||
"author": "HM-RunningHub",
|
||||
"title": "ComfyUI_RH_LLM_API",
|
||||
"reference": "https://github.com/HM-RunningHub/ComfyUI_RH_LLM_API",
|
||||
"files": [
|
||||
"https://github.com/HM-RunningHub/ComfyUI_RH_LLM_API"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "An easy-to-use ComfyUI plugin for LLM integration supporting DeepSeek, OpenAI API-compatible models, with video reverse-prompt (captioning) capabilities. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "wqjuser",
|
||||
"title": "ComfyUI-Chat-Image",
|
||||
@ -25286,16 +25206,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom node for ComfyUI that fixes an existing node [a/comfyui-dynamicprompts](https://github.com/adieyal/comfyui-dynamicprompts)."
|
||||
},
|
||||
{
|
||||
"author": "thezveroboy",
|
||||
"title": "ComfyUI-ClipReshaper",
|
||||
"reference": "https://github.com/thezveroboy/ComfyUI-ClipReshaper",
|
||||
"files": [
|
||||
"https://github.com/thezveroboy/ComfyUI-ClipReshaper"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes to reshape/project Conditioning tensors and ensure SDXL conditioning metadata."
|
||||
},
|
||||
{
|
||||
"author": "tatookan",
|
||||
"title": "comfyui_ssl_gemini_EXP",
|
||||
@ -26633,6 +26543,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A collection of utility nodes for ComfyUI, focusing on batch processing, stitching, and visualization."
|
||||
},
|
||||
{
|
||||
"author": "AngelCookies",
|
||||
"title": "ComfyUI-Seed-Tracker",
|
||||
"reference": "https://github.com/AngelCookies/ComfyUI-Seed-Tracker",
|
||||
"files": [
|
||||
"https://github.com/AngelCookies/ComfyUI-Seed-Tracker"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI extension that tracks random seeds throughout your image generation workflows"
|
||||
},
|
||||
{
|
||||
"author": "TiamaTiramisu",
|
||||
"title": "RisuTools",
|
||||
@ -27553,16 +27473,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom ComfyUI node for integrating with the Fal Kontext API for advanced image editing and generation."
|
||||
},
|
||||
{
|
||||
"author": "SanDiegoDude",
|
||||
"title": "SCG_LocalVLM",
|
||||
"reference": "https://github.com/SanDiegoDude/SCG_LocalVLM",
|
||||
"files": [
|
||||
"https://github.com/SanDiegoDude/SCG_LocalVLM"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This is an implementation of [Qwen3-VL](https://github.com/QwenLM/Qwen3-VL) for [ComfyUI](https://github.com/comfyanonymous/ComfyUI), which supports for text-based and single-image queries."
|
||||
},
|
||||
{
|
||||
"author": "tavyra",
|
||||
"title": "ComfyUI_Curves",
|
||||
@ -28111,17 +28021,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Advanced seed generator for ComfyUI with multiple modes, state persistence, and cross-library synchronization"
|
||||
},
|
||||
{
|
||||
"author": "Limbicnation",
|
||||
"title": "ComfyUI-PromptGenerator",
|
||||
"id": "comfyui-prompt-generator",
|
||||
"reference": "https://github.com/Limbicnation/ComfyUI-PromptGenerator",
|
||||
"files": [
|
||||
"https://github.com/Limbicnation/ComfyUI-PromptGenerator"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Generate Stable Diffusion prompts using Qwen3-8B via Ollama with 7 style presets (cinematic, anime, photorealistic, fantasy, abstract, cyberpunk, sci-fi)"
|
||||
},
|
||||
{
|
||||
"author": "hao-ai-lab",
|
||||
"title": "FastVideo",
|
||||
@ -29577,16 +29476,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "The ListHelper collection is a comprehensive set of custom nodes for ComfyUI that provides powerful list manipulation capabilities. This collection includes audio processing, text splitting, and number generation tools for enhanced workflow automation."
|
||||
},
|
||||
{
|
||||
"author": "dseditor",
|
||||
"title": "Comfy-MCP",
|
||||
"reference": "https://github.com/dseditor/Comfy-MCP",
|
||||
"files": [
|
||||
"https://github.com/dseditor/Comfy-MCP"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Simple MCP Server for ComfyUI text to image Workflow - ComfyUI Node Integration , Based on lalanikarim/comfy-mcp-server work"
|
||||
},
|
||||
{
|
||||
"author": "Leon",
|
||||
"title": "Leon's Utility and API Integration Nodes",
|
||||
@ -29681,6 +29570,17 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Professional AI Image Description Generator\nBased on Zhipu AI GLM-4V multimodal model, batch generate accurate and detailed descriptions for images in Chinese and English"
|
||||
},
|
||||
{
|
||||
"author": "jkhayiying",
|
||||
"title": "ImageLoadFromLocalOrUrl Node for ComfyUI",
|
||||
"id": "JkhaImageLoaderPathOrUrl",
|
||||
"reference": "https://gitee.com/yyh915/jkha-load-img",
|
||||
"files": [
|
||||
"https://gitee.com/yyh915/jkha-load-img"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This is a node to load an image from local path or url."
|
||||
},
|
||||
{
|
||||
"author": "jinchanz",
|
||||
"title": "ComfyUI-ADIC",
|
||||
@ -32124,16 +32024,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A versatile and highly customizable node for ComfyUI to add camera-style watermarks and frames to your images. Whether you want to emulate the classic Leica look, add EXIF data, or create professional-looking framed images, this plugin has you covered."
|
||||
},
|
||||
{
|
||||
"author": "karas17",
|
||||
"title": "comfyui_GLM_TTS",
|
||||
"reference": "https://github.com/karas17/comfyui_GLM_TTS",
|
||||
"files": [
|
||||
"https://github.com/karas17/comfyui_GLM_TTS"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes for GLM-TTS, a high-quality text-to-speech system supporting zero-shot voice cloning."
|
||||
},
|
||||
{
|
||||
"author": "shinyakidoguchi301",
|
||||
"title": "shinyakidoguchi301/LoRA Tag Loader for ComfyUI",
|
||||
@ -33815,16 +33705,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom ComfyUI nodes for integrating WaveSpeed AI API for image and video generation."
|
||||
},
|
||||
{
|
||||
"author": "razvanmatei-sf",
|
||||
"title": "comfyui-stillfront",
|
||||
"reference": "https://github.com/razvanmatei-sf/comfyui-stillfront",
|
||||
"files": [
|
||||
"https://github.com/razvanmatei-sf/comfyui-stillfront"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Consolidated collection of custom ComfyUI nodes with LLM integration (Claude, Gemini), WaveSpeed API support, and utility nodes for resolution presets and dynamic prompts. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "blurgyy",
|
||||
"title": "CoMPaSS-ComfyUI",
|
||||
@ -34169,16 +34049,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Remove background scenery from an image of a person. The output image is saved as an RGBA PNG. The alpha channel is included."
|
||||
},
|
||||
{
|
||||
"author": "Sean-Bradley",
|
||||
"title": "ComfyUI-Get-Line",
|
||||
"reference": "https://github.com/Sean-Bradley/ComfyUI-Get-Line",
|
||||
"files": [
|
||||
"https://github.com/Sean-Bradley/ComfyUI-Get-Line"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node used to get one line of string from a multi line string. Search in the manager for `get line`, or `getline` or `get-line`."
|
||||
},
|
||||
{
|
||||
"author": "LukeCoulson1",
|
||||
"title": "ComfyUI LoRA Combine Node",
|
||||
@ -34867,16 +34737,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "View Image Metadata of ComfyUI as well as of ForgeUI or Automatic 1111 generated images in Easily Readable Format"
|
||||
},
|
||||
{
|
||||
"author": "ShammiG",
|
||||
"title": "ComfyUI-Show_Any_Text_in_CMD_Console-SG",
|
||||
"reference": "https://github.com/ShammiG/ComfyUI-Show_Any_Text_in_CMD_Console-SG",
|
||||
"files": [
|
||||
"https://github.com/ShammiG/ComfyUI-Show_Any_Text_in_CMD_Console-SG"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Simple node to show ANY output text in the CMD console with color options"
|
||||
},
|
||||
{
|
||||
"author": "bgreene2",
|
||||
"title": "ComfyUI-Hunyuan-Image-3",
|
||||
@ -35329,16 +35189,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "SAM 3D Body integration for ComfyUI - Robust full-body human mesh recovery from single images. Reconstruct 3D human meshes with pose, shape, and hand details. First draft, please open a github issue if you have any problems or feature requests :)"
|
||||
},
|
||||
{
|
||||
"author": "PozzettiAndrea",
|
||||
"title": "ComfyUI-Sharp",
|
||||
"reference": "https://github.com/PozzettiAndrea/ComfyUI-Sharp",
|
||||
"files": [
|
||||
"https://github.com/PozzettiAndrea/ComfyUI-Sharp"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "SHARP integration for ComfyUI - Monocular 3D Gaussian Splatting in under 1 second. Generate 3D Gaussians from a single image using Apple's SHARP model."
|
||||
},
|
||||
{
|
||||
"author": "rookiestar28",
|
||||
"title": "Danbooru Tags Upsampler for ComfyUI",
|
||||
@ -35707,16 +35557,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "This custom ComfyUI node, Find Perfect Resolution, calculates an optimal output resolution for an input image while preserving its aspect ratio and ensuring dimensions are divisible by a specified value. It is designed to work seamlessly in ComfyUI workflows, particularly for resizing images with nodes like 'Resize Image v2'."
|
||||
},
|
||||
{
|
||||
"author": "ashtar1984",
|
||||
"title": "ComfyUI-SwitchPathLazy",
|
||||
"reference": "https://github.com/ashtar1984/ComfyUI-SwitchPathLazy",
|
||||
"files": [
|
||||
"https://github.com/ashtar1984/ComfyUI-SwitchPathLazy"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Efficient lazy path switch for ComfyUI. Skips execution of the inactive branch entirely using native lazy evaluation. Includes live status display."
|
||||
},
|
||||
{
|
||||
"author": "cybernaut4",
|
||||
"title": "Arkl1te's Toolkit",
|
||||
@ -35968,6 +35808,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Multi-frame reference conditioning nodes for Wan2.2 A14B I2V models."
|
||||
},
|
||||
{
|
||||
"author": "wallen0322",
|
||||
"title": "ComfyUI-TTM-WAN22",
|
||||
"reference": "https://github.com/wallen0322/ComfyUI-TTM-WAN22",
|
||||
"files": [
|
||||
"https://github.com/wallen0322/ComfyUI-TTM-WAN22"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "TTM (Time-to-Move) node for ComfyUI enabling motion-controlled video generation with Wan2.2 models using dual-clock denoising for independent background and object animation control."
|
||||
},
|
||||
{
|
||||
"author": "wallen0322",
|
||||
"title": "ComfyUI-AE-Animation",
|
||||
@ -36317,16 +36167,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "This repository is a ComfyUI port of the WithAnyone model introduced in the paper.\n[a/WithAnyone: Towards Controllable and ID-Consistent Image Generation (2025)](https://arxiv.org/abs/2510.14975)\nOriginal implementation: [a/Doby-Xu/WithAnyone](https://github.com/Doby-Xu/WithAnyone)."
|
||||
},
|
||||
{
|
||||
"author": "okdalto",
|
||||
"title": "ComfyUI-PersonaLive",
|
||||
"reference": "https://github.com/okdalto/ComfyUI-PersonaLive",
|
||||
"files": [
|
||||
"https://github.com/okdalto/ComfyUI-PersonaLive"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node implementation of PersonaLive: Expressive Portrait Image Animation for Live Streaming, enabling portrait animation driven by reference images. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "hw5511",
|
||||
"title": "Woohee HF Upscaler Loader",
|
||||
@ -37471,17 +37311,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Wan Video Extender extends a short video or a single image into a longer, temporally consistent clip using a VACE based control latent. It runs in multiple extension loops. Each loop can have its own prompt and optional LoRA, so you can evolve the scene step by step without rebuilding the graph."
|
||||
},
|
||||
{
|
||||
"author": "akawana",
|
||||
"title": "AK XZ Axis (XY for any KSampler)",
|
||||
"reference": "https://github.com/akawana/ComfyUI-AK-XZ-Axis",
|
||||
"files": [
|
||||
"https://github.com/akawana/ComfyUI-AK-XZ-Axis"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes for XY-style testing of parameters such as seed, steps, cfg, denoise, prompts, and LoRAs. Does not require a custom KSampler and works with any KSampler, including the default ComfyUI one.",
|
||||
"tags": ["xy_plot", "xy", "xz", "testing", "ksampler"]
|
||||
},
|
||||
{
|
||||
"author": "akawana",
|
||||
"title": "Folded prompts",
|
||||
@ -38276,26 +38105,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom node for building keyframe timelines in Wan video generation with adjustable influence strength, supporting 1-8 keyframes. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "ckinpdx",
|
||||
"title": "comfyui-humo-audio-motion",
|
||||
"reference": "https://github.com/ckinpdx/comfyui-humo-audio-motion",
|
||||
"files": [
|
||||
"https://github.com/ckinpdx/comfyui-humo-audio-motion"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node for granular Q/K/V/O attention boosting in HuMo models. Provides 12 independent controls for fine-tuning audio-driven motion response."
|
||||
},
|
||||
{
|
||||
"author": "ckinpdx",
|
||||
"title": "ComfyUI-SCAIL-AudioReactive",
|
||||
"reference": "https://github.com/ckinpdx/ComfyUI-SCAIL-AudioReactive",
|
||||
"files": [
|
||||
"https://github.com/ckinpdx/ComfyUI-SCAIL-AudioReactive"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Generate audio-reactive SCAIL pose sequences for character animation without requiring input video tracking. Now supports Multi-Character Choreography. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "jessesep",
|
||||
"title": "SimpleVariables",
|
||||
@ -38659,366 +38468,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "The official Draw Things extension for ComfyUI. Sends image-generation requests to Draw Things over gRPC. Supports Bridge Mode for DT+ cloud and local model execution."
|
||||
},
|
||||
{
|
||||
"author": "g7b2",
|
||||
"title": "ComfyUI-Artist-Tester",
|
||||
"reference": "https://github.com/g7b2/ComfyUI-Artist-Tester",
|
||||
"files": [
|
||||
"https://github.com/g7b2/ComfyUI-Artist-Tester"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A dedicated suite of custom nodes for batch testing artists, styles, and prompts in ComfyUI, solving the caching problem with anti-cache logic and dynamic filename generation."
|
||||
},
|
||||
{
|
||||
"author": "ubisoft",
|
||||
"title": "ComfyUI-Chord",
|
||||
"reference": "https://github.com/ubisoft/ComfyUI-Chord",
|
||||
"files": [
|
||||
"https://github.com/ubisoft/ComfyUI-Chord"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom nodes for the paper: Chord: Chain of Rendering Decomposition for PBR Material Estimation from Generated Texture Images"
|
||||
},
|
||||
{
|
||||
"author": "Deathspike",
|
||||
"title": "ComfyUI-MyOriginalWaifu",
|
||||
"reference": "https://github.com/Deathspike/ComfyUI-MyOriginalWaifu",
|
||||
"files": [
|
||||
"https://github.com/Deathspike/ComfyUI-MyOriginalWaifu"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "My Original Waifu is a tag-based prompt-transformation engine for ComfyUI designed for creators who want their original characters to feel consistent, expressive, and faithfully rendered across every scene. Instead of manually adjusting tags each time you generate an image, you define the essence of your waifu, her look, her outfits, the way she appears in different contexts, and the engine transforms your prompt to match those intentions. It stays out of the way and simply follows your rules with clarity and consistency. Your Waifu. Your Rules. Your Perfect Prompt."
|
||||
},
|
||||
{
|
||||
"author": "LeonQ8",
|
||||
"title": "ComfyUI-Dynamic-Lora-Scheduler",
|
||||
"reference": "https://github.com/LeonQ8/ComfyUI-Dynamic-Lora-Scheduler",
|
||||
"files": [
|
||||
"https://github.com/LeonQ8/ComfyUI-Dynamic-Lora-Scheduler"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Dynamically balance weights of multiple LoRAs over generation steps for ComfyUI."
|
||||
},
|
||||
{
|
||||
"author": "sebagallo",
|
||||
"title": "comfyui-sg-llama-cpp",
|
||||
"reference": "https://github.com/sebagallo/comfyui-sg-llama-cpp",
|
||||
"files": [
|
||||
"https://github.com/sebagallo/comfyui-sg-llama-cpp"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "llama-cpp-python wrapper, with support for vision models. It allows the user to generate text responses from prompts using llama.cpp."
|
||||
},
|
||||
{
|
||||
"author": "hubo502",
|
||||
"title": "ComfyUI-Env-Loader",
|
||||
"reference": "https://github.com/hubo502/ComfyUI-Env-Loader",
|
||||
"files": [
|
||||
"https://github.com/hubo502/ComfyUI-Env-Loader"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node set that reads .env files at startup and provides dropdown selection or dynamic multi-port output for environment variable access in workflows. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "fabbarix",
|
||||
"title": "comfyui-promptstore",
|
||||
"reference": "https://github.com/fabbarix/comfyui-promptstore",
|
||||
"files": [
|
||||
"https://github.com/fabbarix/comfyui-promptstore"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom node system for ComfyUI enabling efficient prompt management with YAML-based datastore, categories, selection interface, and dynamic text interpolation for creating complex prompts."
|
||||
},
|
||||
{
|
||||
"author": "ARM64-EC",
|
||||
"title": "ComfyUI-LongCatPlugin",
|
||||
"reference": "https://github.com/ARM64-EC/ComfyUI-LongCatPlugin",
|
||||
"files": [
|
||||
"https://github.com/ARM64-EC/ComfyUI-LongCatPlugin"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes wrapping LongCat image generation and editing pipelines with text-to-image and multi-image edit flows using diffusers framework. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "NOLABEL-VFX",
|
||||
"title": "ComfyUI-NL_Nodes",
|
||||
"reference": "https://github.com/NOLABEL-VFX/ComfyUI-NL_Nodes",
|
||||
"files": [
|
||||
"https://github.com/NOLABEL-VFX/ComfyUI-NL_Nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom ComfyUI nodes by NOLABEL for studio workflows, featuring Shot Path Builder that generates standardized, sanitized file and folder names with versioning for renders."
|
||||
},
|
||||
{
|
||||
"author": "pantaleone-ai",
|
||||
"title": "Comfy-Firefly",
|
||||
"reference": "https://github.com/pantaleone-ai/Comfy-Firefly",
|
||||
"files": [
|
||||
"https://github.com/pantaleone-ai/Comfy-Firefly"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom ComfyUI node for generating images using Adobe Firefly Services API v3 with automatic authentication and standard tensor output."
|
||||
},
|
||||
{
|
||||
"author": "febogallo",
|
||||
"title": "ComfyUI-Freepik",
|
||||
"reference": "https://github.com/febogallo/ComfyUI-Freepik",
|
||||
"files": [
|
||||
"https://github.com/febogallo/ComfyUI-Freepik"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Integrates Freepik's AI capabilities into ComfyUI workflows with features for photorealistic generation, upscaling, and background removal, plus smart caching and cost management. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "thnikk",
|
||||
"title": "comfyui-thnikk-utils",
|
||||
"reference": "https://github.com/thnikk/comfyui-thnikk-utils",
|
||||
"files": [
|
||||
"https://github.com/thnikk/comfyui-thnikk-utils"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes to clean up your workflow."
|
||||
},
|
||||
{
|
||||
"author": "XYMikky12138",
|
||||
"title": "ComfyUI-MIKKY-Mask-Editor",
|
||||
"reference": "https://github.com/XYMikky12138/ComfyUI-MIKKY-Mask-Editor",
|
||||
"files": [
|
||||
"https://github.com/XYMikky12138/ComfyUI-MIKKY-Mask-Editor"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A powerful frame-by-frame video mask editor for ComfyUI with painting, auto BBox, hole filling, blur/feathering, and video slicing features."
|
||||
},
|
||||
{
|
||||
"author": "XYMikky12138",
|
||||
"title": "ComfyUI-NanoBanana-inpaint",
|
||||
"reference": "https://github.com/XYMikky12138/ComfyUI-NanoBanana-inpaint",
|
||||
"files": [
|
||||
"https://github.com/XYMikky12138/ComfyUI-NanoBanana-inpaint"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes for API-based inpainting (Gemini, Imagen) with aspect ratio constraints, smart cropping, resize fitting, intelligent paste-back with transparency support. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "SiegeKeebsOffical",
|
||||
"title": "comfyui-lmstudio",
|
||||
"reference": "https://github.com/SiegeKeebsOffical/comfyui-lmstudio",
|
||||
"files": [
|
||||
"https://github.com/SiegeKeebsOffical/comfyui-lmstudio"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom ComfyUI nodes designed to interface with a separate LM Studio instance for language model operations."
|
||||
},
|
||||
{
|
||||
"author": "bombdefuser-124",
|
||||
"title": "Newbie-Teacache-ComfyUI",
|
||||
"reference": "https://github.com/bombdefuser-124/Newbie-Teacache-ComfyUI",
|
||||
"files": [
|
||||
"https://github.com/bombdefuser-124/Newbie-Teacache-ComfyUI"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "TeaCache optimization nodes for ComfyUI's NewBie implementation, featuring patched loader and coefficient calculator for faster inference with configurable quality. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "maxczc",
|
||||
"title": "comfyui-sora-node",
|
||||
"reference": "https://github.com/maxczc/comfyui-sora-node",
|
||||
"files": [
|
||||
"https://github.com/maxczc/comfyui-sora-node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Comprehensive set of ComfyUI custom nodes for interacting with a Sora-compatible REST API, supporting text-to-video, image-to-video, and video-to-video generation."
|
||||
},
|
||||
{
|
||||
"author": "logicalor",
|
||||
"title": "comfyui_multi_replace",
|
||||
"reference": "https://github.com/logicalor/comfyui_multi_replace",
|
||||
"files": [
|
||||
"https://github.com/logicalor/comfyui_multi_replace"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for creating and applying multiple find/replace pairs to text"
|
||||
},
|
||||
{
|
||||
"author": "logicalor",
|
||||
"title": "comfyui_text_to_pose",
|
||||
"reference": "https://github.com/logicalor/comfyui_text_to_pose",
|
||||
"files": [
|
||||
"https://github.com/logicalor/comfyui_text_to_pose"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Generate human poses from text descriptions using T2P Transformer for ControlNet/T2I-Adapter workflows"
|
||||
},
|
||||
{
|
||||
"author": "ssspace1",
|
||||
"title": "SSpack_ComfyUI",
|
||||
"reference": "https://github.com/ssspace1/SSpack_ComfyUI",
|
||||
"files": [
|
||||
"https://github.com/ssspace1/SSpack_ComfyUI"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Compact, UI-friendly nodes for ComfyUI with LoRA/checkpoint selectors with thumbnails, text utilities, image helpers, and a lightweight cache cleaner script."
|
||||
},
|
||||
{
|
||||
"author": "SofianeAlla",
|
||||
"title": "ComfyUI-BespokeAI-3D",
|
||||
"reference": "https://github.com/SofianeAlla/ComfyUI-BespokeAI-3D",
|
||||
"files": [
|
||||
"https://github.com/SofianeAlla/ComfyUI-BespokeAI-3D"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for BespokeAI image-to-3D generation\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "laboratoiresonore",
|
||||
"title": "ComfyUI_PerformanceLab",
|
||||
"reference": "https://github.com/laboratoiresonore/ComfyUI_PerformanceLab",
|
||||
"files": [
|
||||
"https://github.com/laboratoiresonore/ComfyUI_PerformanceLab"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Make any ComfyUI workflow faster, use less VRAM, or produce better quality - with AI assistance"
|
||||
},
|
||||
{
|
||||
"author": "tppp2806",
|
||||
"title": "ComfyUI-YoloTrack",
|
||||
"reference": "https://github.com/tppp2806/ComfyUI-YoloTrack",
|
||||
"files": [
|
||||
"https://github.com/tppp2806/ComfyUI-YoloTrack"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Based on a YOLO model, it performs object detection, capture, and smooth tracking-based cropping on images."
|
||||
},
|
||||
{
|
||||
"author": "revisiontony",
|
||||
"title": "ComfyUI Lora Manager Web Frame",
|
||||
"reference": "https://github.com/revisiontony/LoraMangerWebFrame",
|
||||
"files": [
|
||||
"https://github.com/revisiontony/LoraMangerWebFrame"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Embeds the ComfyUI-Lora-Manager web interface directly into your ComfyUI workflow graph, eliminating the need for a separate browser tab."
|
||||
},
|
||||
{
|
||||
"author": "Maenvaeru",
|
||||
"title": "comfyui-vram-overlay",
|
||||
"reference": "https://github.com/Maenvaeru/comfyui-vram-overlay",
|
||||
"files": [
|
||||
"https://github.com/Maenvaeru/comfyui-vram-overlay"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Professional VRAM monitoring overlay for ComfyUI that displays real-time GPU memory usage as an independent, non-intrusive window. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "PROJECTMAD",
|
||||
"title": "PROJECT-MAD-NODES",
|
||||
"reference": "https://github.com/PROJECTMAD/PROJECT-MAD-NODES",
|
||||
"files": [
|
||||
"https://github.com/PROJECTMAD/PROJECT-MAD-NODES"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Collection of custom ComfyUI nodes for LoRA scheduling and prompt management, featuring visual curve editor and visual prompt gallery with EXIF metadata extraction."
|
||||
},
|
||||
{
|
||||
"author": "flowers6421",
|
||||
"title": "ComfyUI-SimpleTunerFlux2",
|
||||
"reference": "https://github.com/flowers6421/ComfyUI-SimpleTunerFlux2",
|
||||
"files": [
|
||||
"https://github.com/flowers6421/ComfyUI-SimpleTunerFlux2"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes for using SimpleTuner-trained Flux 2 LoRA models. SimpleTuner's Flux 2 architecture uses fused layers, making its LoRAs incompatible with standard ComfyUI Flux nodes. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "scott-createplay",
|
||||
"title": "ComfyUI_video_essentials",
|
||||
"reference": "https://github.com/scott-createplay/ComfyUI_video_essentials",
|
||||
"files": [
|
||||
"https://github.com/scott-createplay/ComfyUI_video_essentials"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Essential video processing nodes for ComfyUI"
|
||||
},
|
||||
{
|
||||
"author": "revisionhiep-create",
|
||||
"title": "comfyui-standard-trigger-words",
|
||||
"reference": "https://github.com/revisionhiep-create/comfyui-standard-trigger-words",
|
||||
"files": [
|
||||
"https://github.com/revisionhiep-create/comfyui-standard-trigger-words"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node for managing trigger words with 50+ editable presets optimized for SDXL Illustrious"
|
||||
},
|
||||
{
|
||||
"author": "Faildes",
|
||||
"title": "ComfyUI-NegativeFold",
|
||||
"reference": "https://github.com/Faildes/ComfyUI-NegativeFold",
|
||||
"files": [
|
||||
"https://github.com/Faildes/ComfyUI-NegativeFold"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Fold negative prompts into positive prompts for use with Turbo models. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "isekai-sh",
|
||||
"title": "isekai-comfy-node",
|
||||
"reference": "https://github.com/isekai-sh/isekai-comfy-node",
|
||||
"files": [
|
||||
"https://github.com/isekai-sh/isekai-comfy-node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Upload and compress AI-generated images and enhance your ComfyUI workflows with powerful string utilities and AI integration."
|
||||
},
|
||||
{
|
||||
"author": "QL-boy",
|
||||
"title": "ComfyUI-Advanced-Tile-Processing",
|
||||
"reference": "https://github.com/QL-boy/ComfyUI-Advanced-Tile-Processing",
|
||||
"files": [
|
||||
"https://github.com/QL-boy/ComfyUI-Advanced-Tile-Processing"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Advanced tiling plugin for ComfyUI solving VRAM limitations in 4K/8K+ image generation using intelligent tiling and seamless weighted fusion with multiple blending modes."
|
||||
},
|
||||
{
|
||||
"author": "gateway",
|
||||
"title": "ComfyUI-Kie-API",
|
||||
"reference": "https://github.com/gateway/ComfyUI-Kie-API",
|
||||
"files": [
|
||||
"https://github.com/gateway/ComfyUI-Kie-API"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Integration framework for KIE Nano Banana Pro API into ComfyUI custom nodes with API key setup and placeholder for upcoming node implementations. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "lazyq666",
|
||||
"title": "gemini-3-simply-comfyui",
|
||||
"reference": "https://github.com/lazyq666/gemini-3-simply-comfyui",
|
||||
"files": [
|
||||
"https://github.com/lazyq666/gemini-3-simply-comfyui"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Two lightweight ComfyUI nodes for Gemini 3 preview models: Gemini 3 Pro (Text) and Gemini 3 Pro Image. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "aslanxie",
|
||||
"title": "comfyui_qwen_image_edit",
|
||||
"reference": "https://github.com/aslanxie/comfyui_qwen_image_edit",
|
||||
"files": [
|
||||
"https://github.com/aslanxie/comfyui_qwen_image_edit"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI Qwen-Image-Edit-2509 node integration for image editing using OpenAI Image API. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "danieljanata",
|
||||
"title": "ComfyUI-QwenVL-Override",
|
||||
"reference": "https://github.com/danieljanata/ComfyUI-QwenVL-Override",
|
||||
"files": [
|
||||
"https://github.com/danieljanata/ComfyUI-QwenVL-Override"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Adds two nodes that reuse upstream ComfyUI-QwenVL presets but add a runtime override that can be wired/unwired without getting stuck."
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
16826
github-stats-cache.json
16826
github-stats-cache.json
File diff suppressed because it is too large
Load Diff
9361
github-stats.json
9361
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]
|
||||
version_code = [3, 38, 3]
|
||||
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
|
||||
|
||||
|
||||
|
||||
@ -38,25 +38,6 @@ SECURITY_MESSAGE_NORMAL_MINUS_MODEL = "ERROR: Downloading models that are not in
|
||||
|
||||
routes = PromptServer.instance.routes
|
||||
|
||||
|
||||
def has_per_queue_preview():
|
||||
"""
|
||||
Check if ComfyUI PR #11261 (per-queue live preview override) is merged
|
||||
|
||||
Returns:
|
||||
bool: True if ComfyUI has per-queue preview feature
|
||||
"""
|
||||
try:
|
||||
import latent_preview
|
||||
return hasattr(latent_preview, 'set_preview_method')
|
||||
except ImportError:
|
||||
return False
|
||||
|
||||
|
||||
# Detect ComfyUI per-queue preview override feature (PR #11261)
|
||||
COMFYUI_HAS_PER_QUEUE_PREVIEW = has_per_queue_preview()
|
||||
|
||||
|
||||
def handle_stream(stream, prefix):
|
||||
stream.reconfigure(encoding=locale.getpreferredencoding(), errors='replace')
|
||||
for msg in stream:
|
||||
@ -201,19 +182,10 @@ def set_preview_method(method):
|
||||
core.get_config()['preview_method'] = method
|
||||
|
||||
|
||||
if COMFYUI_HAS_PER_QUEUE_PREVIEW:
|
||||
logging.info(
|
||||
"[ComfyUI-Manager] ComfyUI per-queue preview override detected (PR #11261). "
|
||||
"Manager's preview method feature is disabled. "
|
||||
"Use ComfyUI's --preview-method CLI option or 'Settings > Execution > Live preview method'."
|
||||
)
|
||||
elif args.preview_method == latent_preview.LatentPreviewMethod.NoPreviews:
|
||||
if args.preview_method == latent_preview.LatentPreviewMethod.NoPreviews:
|
||||
set_preview_method(core.get_config()['preview_method'])
|
||||
else:
|
||||
logging.warning(
|
||||
"[ComfyUI-Manager] Since --preview-method is set, "
|
||||
"ComfyUI-Manager's preview method feature will be ignored."
|
||||
)
|
||||
logging.warning("[ComfyUI-Manager] Since --preview-method is set, ComfyUI-Manager's preview method feature will be ignored.")
|
||||
|
||||
|
||||
def set_component_policy(mode):
|
||||
@ -1510,26 +1482,14 @@ 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)
|
||||
|
||||
# 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)
|
||||
|
||||
# Return current value if not available
|
||||
return web.Response(text=core.manager_funcs.get_current_preview_method(), status=200)
|
||||
|
||||
return web.Response(status=200)
|
||||
|
||||
|
||||
@routes.get("/manager/db_mode")
|
||||
async def db_mode(request):
|
||||
|
||||
@ -1,227 +0,0 @@
|
||||
import { $el } from "../../scripts/ui.js";
|
||||
|
||||
function normalizeContent(content) {
|
||||
const tmp = document.createElement('div');
|
||||
if (typeof content === 'string') {
|
||||
tmp.innerHTML = content;
|
||||
return Array.from(tmp.childNodes);
|
||||
}
|
||||
if (content instanceof Node) {
|
||||
return content;
|
||||
}
|
||||
return content;
|
||||
}
|
||||
|
||||
export function createSettingsCombo(label, content) {
|
||||
const settingItem = $el("div.setting-item", {}, [
|
||||
$el("div.flex.flex-row.items-center.gap-2",[
|
||||
$el("div.form-label.flex.grow.items-center", [
|
||||
$el("span.text-muted", { textContent: label },)
|
||||
]),
|
||||
$el("div.form-input.flex.justify-end",
|
||||
[content]
|
||||
)
|
||||
]
|
||||
)
|
||||
]);
|
||||
return settingItem;
|
||||
}
|
||||
|
||||
export function buildGuiFrame(dialogId, title, iconClass, content, owner) {
|
||||
const dialog_mask = $el("div.p-dialog-mask.p-overlay-mask.p-overlay-mask-enter", {
|
||||
parent: document.body,
|
||||
style: {
|
||||
position: "fixed",
|
||||
height: "100%",
|
||||
width: "100%",
|
||||
left: "0px",
|
||||
top: "0px",
|
||||
display: "flex",
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
pointerEvents: "auto",
|
||||
zIndex: "1000"
|
||||
},
|
||||
onclick: (e) => {
|
||||
if (e.target === dialog_mask) {
|
||||
owner.close();
|
||||
}
|
||||
}
|
||||
// data-pc-section="mask"
|
||||
});
|
||||
|
||||
const header_actions = $el("div.p-dialog-header-actions", {
|
||||
// [TODO]
|
||||
// data-pc-section="headeractions"
|
||||
}
|
||||
);
|
||||
|
||||
const close_button = $el("button.p-button.p-component.p-button-icon-only.p-button-secondary.p-button-rounded.p-button-text.p-dialog-close-button", {
|
||||
parent: header_actions,
|
||||
type: "button",
|
||||
ariaLabel: "Close",
|
||||
onclick: () => owner.close(),
|
||||
// "data-pc-name": "pcclosebutton",
|
||||
// "data-p-disabled": "false",
|
||||
// "data-p-severity": "secondary",
|
||||
// "data-pc-group-section": "headericon",
|
||||
// "data-pc-extend": "button",
|
||||
// "data-pc-section": "root",
|
||||
// [FIXME] Not sure how to do most of the SVG using $el
|
||||
innerHTML: '<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg" class="p-icon p-button-icon" aria-hidden="true"><path d="M8.01186 7.00933L12.27 2.75116C12.341 2.68501 12.398 2.60524 12.4375 2.51661C12.4769 2.42798 12.4982 2.3323 12.4999 2.23529C12.5016 2.13827 12.4838 2.0419 12.4474 1.95194C12.4111 1.86197 12.357 1.78024 12.2884 1.71163C12.2198 1.64302 12.138 1.58893 12.0481 1.55259C11.9581 1.51625 11.8617 1.4984 11.7647 1.50011C11.6677 1.50182 11.572 1.52306 11.4834 1.56255C11.3948 1.60204 11.315 1.65898 11.2488 1.72997L6.99067 5.98814L2.7325 1.72997C2.59553 1.60234 2.41437 1.53286 2.22718 1.53616C2.03999 1.53946 1.8614 1.61529 1.72901 1.74767C1.59663 1.88006 1.5208 2.05865 1.5175 2.24584C1.5142 2.43303 1.58368 2.61419 1.71131 2.75116L5.96948 7.00933L1.71131 11.2675C1.576 11.403 1.5 11.5866 1.5 11.7781C1.5 11.9696 1.576 12.1532 1.71131 12.2887C1.84679 12.424 2.03043 12.5 2.2219 12.5C2.41338 12.5 2.59702 12.424 2.7325 12.2887L6.99067 8.03052L11.2488 12.2887C11.3843 12.424 11.568 12.5 11.7594 12.5C11.9509 12.5 12.1346 12.424 12.27 12.2887C12.4053 12.1532 12.4813 11.9696 12.4813 11.7781C12.4813 11.5866 12.4053 11.403 12.27 11.2675L8.01186 7.00933Z" fill="currentColor"></path></svg><span class="p-button-label" data-pc-section="label"> </span><!---->'
|
||||
}
|
||||
);
|
||||
|
||||
const dialog_header = $el("div.p-dialog-header",
|
||||
[
|
||||
$el("div", [
|
||||
$el("div",
|
||||
{
|
||||
id: "frame-title-container",
|
||||
},
|
||||
[
|
||||
$el("h2.px-4", [
|
||||
$el(iconClass, {
|
||||
style: {
|
||||
"font-size": "1.25rem",
|
||||
"margin-right": ".5rem"
|
||||
}
|
||||
}),
|
||||
$el("span", { textContent: title })
|
||||
])
|
||||
]
|
||||
)
|
||||
]),
|
||||
header_actions
|
||||
]
|
||||
);
|
||||
|
||||
const contentFrame = $el("div.p-dialog-content", {}, normalizeContent(content));
|
||||
const manager_dialog = $el("div.p-dialog.p-component.global-dialog", {
|
||||
id: dialogId,
|
||||
parent: dialog_mask,
|
||||
style: {
|
||||
'display': 'flex',
|
||||
'flex-direction': 'column',
|
||||
'pointer-events': 'auto',
|
||||
'margin': '0px',
|
||||
},
|
||||
role: 'dialog',
|
||||
ariaModal: 'true',
|
||||
// [TODO]
|
||||
// ariaLabbelledby: 'cm-title',
|
||||
// maximized: 'false',
|
||||
// data-pc-name: 'dialog',
|
||||
// data-pc-section: 'root',
|
||||
// data-pd-focustrap: 'true'
|
||||
},
|
||||
[ dialog_header, contentFrame ]
|
||||
);
|
||||
|
||||
const hidden_accessible = $el("span.p-hidden-accessible.p-hidden-focusable", {
|
||||
parent: manager_dialog,
|
||||
tabindex: "0",
|
||||
role: "presentation",
|
||||
ariaHidden: "true",
|
||||
"data-p-hidden-accessible": "true",
|
||||
"data-p-hidden-focusable": "true",
|
||||
"data-pc-section": "firstfocusableelement"
|
||||
});
|
||||
|
||||
return dialog_mask;
|
||||
}
|
||||
|
||||
export function buildGuiFrameCustomHeader(dialogId, customHeader, content, owner) {
|
||||
const dialog_mask = $el("div.p-dialog-mask.p-overlay-mask.p-overlay-mask-enter", {
|
||||
parent: document.body,
|
||||
style: {
|
||||
position: "fixed",
|
||||
height: "100%",
|
||||
width: "100%",
|
||||
left: "0px",
|
||||
top: "0px",
|
||||
display: "flex",
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
pointerEvents: "auto",
|
||||
zIndex: "1000"
|
||||
},
|
||||
onclick: (e) => {
|
||||
if (e.target === dialog_mask) {
|
||||
owner.close();
|
||||
}
|
||||
}
|
||||
// data-pc-section="mask"
|
||||
});
|
||||
|
||||
const header_actions = $el("div.p-dialog-header-actions", {
|
||||
// [TODO]
|
||||
// data-pc-section="headeractions"
|
||||
}
|
||||
);
|
||||
|
||||
const close_button = $el("button.p-button.p-component.p-button-icon-only.p-button-secondary.p-button-rounded.p-button-text.p-dialog-close-button", {
|
||||
parent: header_actions,
|
||||
type: "button",
|
||||
ariaLabel: "Close",
|
||||
onclick: () => owner.close(),
|
||||
// "data-pc-name": "pcclosebutton",
|
||||
// "data-p-disabled": "false",
|
||||
// "data-p-severity": "secondary",
|
||||
// "data-pc-group-section": "headericon",
|
||||
// "data-pc-extend": "button",
|
||||
// "data-pc-section": "root",
|
||||
// [FIXME] Not sure how to do most of the SVG using $el
|
||||
innerHTML: '<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg" class="p-icon p-button-icon" aria-hidden="true"><path d="M8.01186 7.00933L12.27 2.75116C12.341 2.68501 12.398 2.60524 12.4375 2.51661C12.4769 2.42798 12.4982 2.3323 12.4999 2.23529C12.5016 2.13827 12.4838 2.0419 12.4474 1.95194C12.4111 1.86197 12.357 1.78024 12.2884 1.71163C12.2198 1.64302 12.138 1.58893 12.0481 1.55259C11.9581 1.51625 11.8617 1.4984 11.7647 1.50011C11.6677 1.50182 11.572 1.52306 11.4834 1.56255C11.3948 1.60204 11.315 1.65898 11.2488 1.72997L6.99067 5.98814L2.7325 1.72997C2.59553 1.60234 2.41437 1.53286 2.22718 1.53616C2.03999 1.53946 1.8614 1.61529 1.72901 1.74767C1.59663 1.88006 1.5208 2.05865 1.5175 2.24584C1.5142 2.43303 1.58368 2.61419 1.71131 2.75116L5.96948 7.00933L1.71131 11.2675C1.576 11.403 1.5 11.5866 1.5 11.7781C1.5 11.9696 1.576 12.1532 1.71131 12.2887C1.84679 12.424 2.03043 12.5 2.2219 12.5C2.41338 12.5 2.59702 12.424 2.7325 12.2887L6.99067 8.03052L11.2488 12.2887C11.3843 12.424 11.568 12.5 11.7594 12.5C11.9509 12.5 12.1346 12.424 12.27 12.2887C12.4053 12.1532 12.4813 11.9696 12.4813 11.7781C12.4813 11.5866 12.4053 11.403 12.27 11.2675L8.01186 7.00933Z" fill="currentColor"></path></svg><span class="p-button-label" data-pc-section="label"> </span><!---->'
|
||||
}
|
||||
);
|
||||
|
||||
const _customHeader = normalizeContent(customHeader);
|
||||
const dialog_header = $el("div.p-dialog-header",
|
||||
[
|
||||
$el("div", [
|
||||
$el("div",
|
||||
{
|
||||
id: "frame-title-container",
|
||||
},
|
||||
Array.isArray(_customHeader) ? _customHeader : [_customHeader]
|
||||
)
|
||||
]),
|
||||
header_actions
|
||||
]
|
||||
);
|
||||
|
||||
const contentFrame = $el("div.p-dialog-content", {}, normalizeContent(content));
|
||||
const manager_dialog = $el("div.p-dialog.p-component.global-dialog", {
|
||||
id: dialogId,
|
||||
parent: dialog_mask,
|
||||
style: {
|
||||
'display': 'flex',
|
||||
'flex-direction': 'column',
|
||||
'pointer-events': 'auto',
|
||||
'margin': '0px',
|
||||
},
|
||||
role: 'dialog',
|
||||
ariaModal: 'true',
|
||||
// [TODO]
|
||||
// ariaLabbelledby: 'cm-title',
|
||||
// maximized: 'false',
|
||||
// data-pc-name: 'dialog',
|
||||
// data-pc-section: 'root',
|
||||
// data-pd-focustrap: 'true'
|
||||
},
|
||||
[ dialog_header, contentFrame ]
|
||||
);
|
||||
|
||||
const hidden_accessible = $el("span.p-hidden-accessible.p-hidden-focusable", {
|
||||
parent: manager_dialog,
|
||||
tabindex: "0",
|
||||
role: "presentation",
|
||||
ariaHidden: "true",
|
||||
"data-p-hidden-accessible": "true",
|
||||
"data-p-hidden-focusable": "true",
|
||||
"data-pc-section": "firstfocusableelement"
|
||||
});
|
||||
|
||||
return dialog_mask;
|
||||
}
|
||||
@ -20,7 +20,6 @@ import { ComponentBuilderDialog, getPureName, load_components, set_component_pol
|
||||
import { CustomNodesManager } from "./custom-nodes-manager.js";
|
||||
import { ModelManager } from "./model-manager.js";
|
||||
import { SnapshotManager } from "./snapshot.js";
|
||||
import { buildGuiFrame, createSettingsCombo } from "./comfyui-gui-builder.js";
|
||||
|
||||
let manager_version = await getVersion();
|
||||
|
||||
@ -45,16 +44,12 @@ docStyle.innerHTML = `
|
||||
|
||||
#cm-manager-dialog {
|
||||
width: 1000px;
|
||||
height: auto;
|
||||
height: 455px;
|
||||
box-sizing: content-box;
|
||||
z-index: 1000;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
#cm-manager-dialog br {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.cb-widget {
|
||||
width: 400px;
|
||||
height: 25px;
|
||||
@ -85,7 +80,6 @@ docStyle.innerHTML = `
|
||||
}
|
||||
|
||||
.cm-menu-container {
|
||||
padding : calc(var(--spacing)*2);
|
||||
column-gap: 20px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
@ -146,8 +140,8 @@ docStyle.innerHTML = `
|
||||
}
|
||||
|
||||
.cm-notice-board {
|
||||
width: auto;
|
||||
height: 280px;
|
||||
width: 290px;
|
||||
height: 230px;
|
||||
overflow: auto;
|
||||
color: var(--input-text);
|
||||
border: 1px solid var(--descrip-text);
|
||||
@ -244,50 +238,68 @@ var is_updating = false;
|
||||
// copied style from https://github.com/pythongosssss/ComfyUI-Custom-Scripts
|
||||
const style = `
|
||||
#workflowgallery-button {
|
||||
height: 50px;
|
||||
width: 310px;
|
||||
height: 27px;
|
||||
padding: 0px !important;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
font-size: 17px !important;
|
||||
}
|
||||
#cm-nodeinfo-button {
|
||||
|
||||
width: 310px;
|
||||
height: 27px;
|
||||
padding: 0px !important;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
font-size: 17px !important;
|
||||
}
|
||||
#cm-manual-button {
|
||||
|
||||
width: 310px;
|
||||
height: 27px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.cm-button {
|
||||
width: auto;
|
||||
width: 310px;
|
||||
height: 30px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
background-color: var(--comfy-menu-secondary-bg);
|
||||
border-color: var(--border-color);
|
||||
color: var(--input-text);
|
||||
}
|
||||
|
||||
.cm-button:hover {
|
||||
filter: brightness(125%);
|
||||
font-size: 17px !important;
|
||||
}
|
||||
|
||||
.cm-button-red {
|
||||
width: 310px;
|
||||
height: 30px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
font-size: 17px !important;
|
||||
background-color: #500000 !important;
|
||||
border-color: #88181b !important;
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.cm-button-red:hover {
|
||||
background-color: #88181b !important;
|
||||
}
|
||||
|
||||
.cm-button-orange {
|
||||
width: 310px;
|
||||
height: 30px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
font-size: 17px !important;
|
||||
font-weight: bold;
|
||||
background-color: orange !important;
|
||||
color: black !important;
|
||||
}
|
||||
|
||||
.cm-experimental-button {
|
||||
width: 100%;
|
||||
width: 290px;
|
||||
height: 30px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
font-size: 17px !important;
|
||||
}
|
||||
|
||||
.cm-experimental {
|
||||
width: 310px;
|
||||
border: 1px solid #555;
|
||||
border-radius: 5px;
|
||||
padding: 10px;
|
||||
@ -314,14 +326,8 @@ const style = `
|
||||
|
||||
.cm-menu-combo {
|
||||
cursor: pointer;
|
||||
padding: 0.5em 0.5em;
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 6px;
|
||||
background: var(--comfy-menu-secondary-bg);
|
||||
}
|
||||
|
||||
.cm-menu-combo:hover {
|
||||
filter: brightness(125%);
|
||||
width: 310px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.cm-small-button {
|
||||
@ -825,7 +831,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
const isElectron = 'electronAPI' in window;
|
||||
|
||||
update_comfyui_button =
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Update ComfyUI",
|
||||
style: {
|
||||
@ -836,7 +842,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
});
|
||||
|
||||
switch_comfyui_button =
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Switch ComfyUI",
|
||||
style: {
|
||||
@ -847,7 +853,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
});
|
||||
|
||||
restart_stop_button =
|
||||
$el("button.p-button.p-component.cm-button-red", {
|
||||
$el("button.cm-button-red", {
|
||||
type: "button",
|
||||
textContent: "Restart",
|
||||
onclick: () => restartOrStop()
|
||||
@ -855,7 +861,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
|
||||
if(isElectron) {
|
||||
update_all_button =
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Update All Custom Nodes",
|
||||
onclick:
|
||||
@ -864,7 +870,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
else {
|
||||
update_all_button =
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Update All",
|
||||
onclick:
|
||||
@ -874,7 +880,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
|
||||
const res =
|
||||
[
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Custom Nodes Manager",
|
||||
onclick:
|
||||
@ -886,7 +892,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
}),
|
||||
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Install Missing Custom Nodes",
|
||||
onclick:
|
||||
@ -898,7 +904,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
}),
|
||||
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Custom Nodes In Workflow",
|
||||
onclick:
|
||||
@ -910,8 +916,8 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
}),
|
||||
|
||||
$el("div", {}, []),
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("br", {}, []),
|
||||
$el("button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Model Manager",
|
||||
onclick:
|
||||
@ -923,7 +929,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
}),
|
||||
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Install via Git URL",
|
||||
onclick: async () => {
|
||||
@ -935,13 +941,13 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
}),
|
||||
|
||||
$el("div", {}, []),
|
||||
$el("br", {}, []),
|
||||
update_all_button,
|
||||
update_comfyui_button,
|
||||
switch_comfyui_button,
|
||||
// fetch_updates_button,
|
||||
|
||||
$el("div", {}, []),
|
||||
$el("br", {}, []),
|
||||
restart_stop_button,
|
||||
];
|
||||
|
||||
@ -954,13 +960,12 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
let self = this;
|
||||
|
||||
// db mode
|
||||
|
||||
this.datasrc_combo = document.createElement("select");
|
||||
this.datasrc_combo.setAttribute("title", "Configure where to retrieve node/model information. If set to 'local,' the channel is ignored, and if set to 'channel (remote),' it fetches the latest information each time the list is opened.");
|
||||
this.datasrc_combo.className = "cm-menu-combo p-select p-component p-inputwrapper p-inputwrapper-filled ";
|
||||
this.datasrc_combo.appendChild($el('option', { value: 'cache', text: 'Channel (1day cache)' }, []));
|
||||
this.datasrc_combo.appendChild($el('option', { value: 'local', text: 'Local' }, []));
|
||||
this.datasrc_combo.appendChild($el('option', { value: 'remote', text: 'Channel (remote)' }, []));
|
||||
this.datasrc_combo.className = "cm-menu-combo";
|
||||
this.datasrc_combo.appendChild($el('option', { value: 'cache', text: 'DB: Channel (1day cache)' }, []));
|
||||
this.datasrc_combo.appendChild($el('option', { value: 'local', text: 'DB: Local' }, []));
|
||||
this.datasrc_combo.appendChild($el('option', { value: 'remote', text: 'DB: Channel (remote)' }, []));
|
||||
|
||||
api.fetchApi('/manager/db_mode')
|
||||
.then(response => response.text())
|
||||
@ -970,110 +975,27 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
api.fetchApi(`/manager/db_mode?value=${event.target.value}`);
|
||||
});
|
||||
|
||||
const dbRetrievalSetttingItem = createSettingsCombo("DB", this.datasrc_combo);
|
||||
|
||||
// preview method
|
||||
let preview_combo = document.createElement("select");
|
||||
preview_combo.setAttribute("title", "Configure how latent variables will be decoded during preview in the sampling process.");
|
||||
preview_combo.className = "cm-menu-combo p-select p-component p-inputwrapper p-inputwrapper-filled";
|
||||
preview_combo.className = "cm-menu-combo";
|
||||
preview_combo.appendChild($el('option', { value: 'auto', text: 'Preview method: Auto' }, []));
|
||||
preview_combo.appendChild($el('option', { value: 'taesd', text: 'Preview method: TAESD (slow)' }, []));
|
||||
preview_combo.appendChild($el('option', { value: 'latent2rgb', text: 'Preview method: Latent2RGB (fast)' }, []));
|
||||
preview_combo.appendChild($el('option', { value: 'none', text: 'Preview method: None (very fast)' }, []));
|
||||
|
||||
// Loading state to prevent flash of enabled state
|
||||
preview_combo.appendChild($el('option', { value: '', text: 'Loading...', disabled: true }, []));
|
||||
preview_combo.appendChild($el('option', { value: 'auto', text: 'Auto' }, []));
|
||||
preview_combo.appendChild($el('option', { value: 'taesd', text: 'TAESD (slow)' }, []));
|
||||
preview_combo.appendChild($el('option', { value: 'latent2rgb', text: 'Latent2RGB (fast)' }, []));
|
||||
preview_combo.appendChild($el('option', { value: 'none', text: 'None (very fast)' }, []));
|
||||
|
||||
// Start disabled to prevent flash
|
||||
preview_combo.disabled = true;
|
||||
preview_combo.value = '';
|
||||
|
||||
// Fetch current state
|
||||
api.fetchApi('/manager/preview_method')
|
||||
.then(response => response.text())
|
||||
.then(data => {
|
||||
// Remove loading option
|
||||
preview_combo.querySelector('option[value=""]')?.remove();
|
||||
|
||||
if (data === "DISABLED") {
|
||||
// ComfyUI per-queue preview feature is active
|
||||
preview_combo.disabled = true;
|
||||
preview_combo.value = 'auto';
|
||||
|
||||
// Accessibility attributes
|
||||
preview_combo.setAttribute("aria-disabled", "true");
|
||||
preview_combo.setAttribute("aria-label",
|
||||
"Preview method setting (disabled - managed by ComfyUI). " +
|
||||
"Use Settings > Execution > Live preview method instead."
|
||||
);
|
||||
|
||||
// Tooltip for mouse users
|
||||
preview_combo.setAttribute("title",
|
||||
"This feature is now provided natively by ComfyUI. " +
|
||||
"Please use 'Settings > Execution > Live preview method' instead."
|
||||
);
|
||||
|
||||
// Visual feedback
|
||||
preview_combo.style.opacity = '0.6';
|
||||
preview_combo.style.cursor = 'not-allowed';
|
||||
} else {
|
||||
// Manager feature is active
|
||||
preview_combo.disabled = false;
|
||||
preview_combo.value = data;
|
||||
|
||||
// Accessibility for enabled state
|
||||
preview_combo.setAttribute("aria-label",
|
||||
"Preview method setting. Select how latent variables are decoded during preview."
|
||||
);
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('[ComfyUI-Manager] Failed to fetch preview method status:', error);
|
||||
// Error recovery: fallback to enabled
|
||||
preview_combo.querySelector('option[value=""]')?.remove();
|
||||
preview_combo.disabled = false;
|
||||
preview_combo.value = 'auto';
|
||||
});
|
||||
.then(data => { preview_combo.value = data; });
|
||||
|
||||
preview_combo.addEventListener('change', function (event) {
|
||||
// Ignore if disabled
|
||||
if (preview_combo.disabled) {
|
||||
event.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
// Normal operation
|
||||
api.fetchApi(`/manager/preview_method?value=${event.target.value}`)
|
||||
.then(response => {
|
||||
if (response.status === 403) {
|
||||
// Feature transitioned to native
|
||||
alert(
|
||||
'This feature is now provided natively by ComfyUI.\n' +
|
||||
'Please use \'Settings > Execution > Live preview method\' instead.'
|
||||
);
|
||||
preview_combo.disabled = true;
|
||||
preview_combo.style.opacity = '0.6';
|
||||
preview_combo.style.cursor = 'not-allowed';
|
||||
|
||||
// Update aria attributes
|
||||
preview_combo.setAttribute("aria-disabled", "true");
|
||||
preview_combo.setAttribute("aria-label",
|
||||
"Preview method setting (disabled - managed by ComfyUI). " +
|
||||
"Use Settings > Execution > Live preview method instead."
|
||||
);
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('[ComfyUI-Manager] Preview method update failed:', error);
|
||||
});
|
||||
api.fetchApi(`/manager/preview_method?value=${event.target.value}`);
|
||||
});
|
||||
|
||||
const previewSetttingItem = createSettingsCombo("Preview method", preview_combo);
|
||||
|
||||
// channel
|
||||
let channel_combo = document.createElement("select");
|
||||
channel_combo.setAttribute("title", "Configure the channel for retrieving data from the Custom Node list (including missing nodes) or the Model list.");
|
||||
channel_combo.className = "cm-menu-combo p-select p-component p-inputwrapper p-inputwrapper-filled";
|
||||
channel_combo.className = "cm-menu-combo";
|
||||
api.fetchApi('/manager/channel_url_list')
|
||||
.then(response => response.json())
|
||||
.then(async data => {
|
||||
@ -1082,7 +1004,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
for (let i in urls) {
|
||||
if (urls[i] != '') {
|
||||
let name_url = urls[i].split('::');
|
||||
channel_combo.appendChild($el('option', { value: name_url[0], text: `${name_url[0]}` }, []));
|
||||
channel_combo.appendChild($el('option', { value: name_url[0], text: `Channel: ${name_url[0]}` }, []));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1097,13 +1019,11 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
});
|
||||
|
||||
const channelSetttingItem = createSettingsCombo("Channel", channel_combo);
|
||||
|
||||
|
||||
// share
|
||||
let share_combo = document.createElement("select");
|
||||
share_combo.setAttribute("title", "Hide the share button in the main menu or set the default action upon clicking it. Additionally, configure the default share site when sharing via the context menu's share button.");
|
||||
share_combo.className = "cm-menu-combo p-select p-component p-inputwrapper p-inputwrapper-filled";
|
||||
share_combo.className = "cm-menu-combo";
|
||||
const share_options = [
|
||||
['none', 'None'],
|
||||
['openart', 'OpenArt AI'],
|
||||
@ -1114,7 +1034,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
['all', 'All'],
|
||||
];
|
||||
for (const option of share_options) {
|
||||
share_combo.appendChild($el('option', { value: option[0], text: `${option[1]}` }, []));
|
||||
share_combo.appendChild($el('option', { value: option[0], text: `Share: ${option[1]}` }, []));
|
||||
}
|
||||
|
||||
api.fetchApi('/manager/share_option')
|
||||
@ -1136,14 +1056,12 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
});
|
||||
|
||||
const shareSetttingItem = createSettingsCombo("Share", share_combo);
|
||||
|
||||
let component_policy_combo = document.createElement("select");
|
||||
component_policy_combo.setAttribute("title", "When loading the workflow, configure which version of the component to use.");
|
||||
component_policy_combo.className = "cm-menu-combo p-select p-component p-inputwrapper p-inputwrapper-filled";
|
||||
component_policy_combo.appendChild($el('option', { value: 'workflow', text: 'Use workflow version' }, []));
|
||||
component_policy_combo.appendChild($el('option', { value: 'higher', text: 'Use higher version' }, []));
|
||||
component_policy_combo.appendChild($el('option', { value: 'mine', text: 'Use my version' }, []));
|
||||
component_policy_combo.className = "cm-menu-combo";
|
||||
component_policy_combo.appendChild($el('option', { value: 'workflow', text: 'Component: Use workflow version' }, []));
|
||||
component_policy_combo.appendChild($el('option', { value: 'higher', text: 'Component: Use higher version' }, []));
|
||||
component_policy_combo.appendChild($el('option', { value: 'mine', text: 'Component: Use my version' }, []));
|
||||
api.fetchApi('/manager/policy/component')
|
||||
.then(response => response.text())
|
||||
.then(data => {
|
||||
@ -1156,14 +1074,15 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
set_component_policy(event.target.value);
|
||||
});
|
||||
|
||||
const componentSetttingItem = createSettingsCombo("Component", component_policy_combo);
|
||||
|
||||
update_policy_combo = document.createElement("select");
|
||||
|
||||
if(isElectron)
|
||||
update_policy_combo.style.display = 'none';
|
||||
|
||||
update_policy_combo.setAttribute("title", "Sets the policy to be applied when performing an update.");
|
||||
update_policy_combo.className = "cm-menu-combo p-select p-component p-inputwrapper p-inputwrapper-filled";
|
||||
update_policy_combo.appendChild($el('option', { value: 'stable-comfyui', text: 'ComfyUI Stable Version' }, []));
|
||||
update_policy_combo.appendChild($el('option', { value: 'nightly-comfyui', text: 'ComfyUI Nightly Version' }, []));
|
||||
update_policy_combo.className = "cm-menu-combo";
|
||||
update_policy_combo.appendChild($el('option', { value: 'stable-comfyui', text: 'Update: ComfyUI Stable Version' }, []));
|
||||
update_policy_combo.appendChild($el('option', { value: 'nightly-comfyui', text: 'Update: ComfyUI Nightly Version' }, []));
|
||||
api.fetchApi('/manager/policy/update')
|
||||
.then(response => response.text())
|
||||
.then(data => {
|
||||
@ -1174,22 +1093,20 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
api.fetchApi(`/manager/policy/update?value=${event.target.value}`);
|
||||
});
|
||||
|
||||
const updateSetttingItem = createSettingsCombo("Update", update_policy_combo);
|
||||
|
||||
if(isElectron)
|
||||
updateSetttingItem.style.display = 'none';
|
||||
|
||||
return [
|
||||
dbRetrievalSetttingItem,
|
||||
channelSetttingItem,
|
||||
previewSetttingItem,
|
||||
shareSetttingItem,
|
||||
componentSetttingItem,
|
||||
updateSetttingItem,
|
||||
//[TODO] replace mt-2 with wrapper div with flex column gap
|
||||
$el("filedset.cm-experimental.mt-auto", {}, [
|
||||
$el("br", {}, []),
|
||||
this.datasrc_combo,
|
||||
channel_combo,
|
||||
preview_combo,
|
||||
share_combo,
|
||||
component_policy_combo,
|
||||
update_policy_combo,
|
||||
$el("br", {}, []),
|
||||
|
||||
$el("br", {}, []),
|
||||
$el("filedset.cm-experimental", {}, [
|
||||
$el("legend.cm-experimental-legend", {}, ["EXPERIMENTAL"]),
|
||||
$el("button.p-button.p-component.cm-button.cm-experimental-button", {
|
||||
$el("button.cm-experimental-button", {
|
||||
type: "button",
|
||||
textContent: "Snapshot Manager",
|
||||
onclick:
|
||||
@ -1199,7 +1116,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
SnapshotManager.instance.show();
|
||||
}
|
||||
}),
|
||||
$el("button.p-button.p-component.cm-button.cm-experimental-button.mt-2", {
|
||||
$el("button.cm-experimental-button", {
|
||||
type: "button",
|
||||
textContent: "Install PIP packages",
|
||||
onclick:
|
||||
@ -1217,7 +1134,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
|
||||
createControlsRight() {
|
||||
const elts = [
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-button", {
|
||||
id: 'cm-manual-button',
|
||||
type: "button",
|
||||
textContent: "Community Manual",
|
||||
@ -1268,11 +1185,11 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
})
|
||||
]),
|
||||
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button", {
|
||||
id: 'workflowgallery-button',
|
||||
type: "button",
|
||||
style: {
|
||||
// ...(localStorage.getItem("wg_last_visited") ? {height: '50px'} : {})
|
||||
...(localStorage.getItem("wg_last_visited") ? {height: '50px'} : {})
|
||||
},
|
||||
onclick: (e) => {
|
||||
const last_visited_site = localStorage.getItem("wg_last_visited")
|
||||
@ -1295,7 +1212,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}, [
|
||||
$el("p", {
|
||||
id: 'workflowgallery-button-last-visited-label',
|
||||
textContent: `(${localStorage.getItem("wg_last_visited") ? localStorage.getItem("wg_last_visited").split('/')[2] : 'none selected'})`,
|
||||
textContent: `(${localStorage.getItem("wg_last_visited") ? localStorage.getItem("wg_last_visited").split('/')[2] : ''})`,
|
||||
style: {
|
||||
'text-align': 'center',
|
||||
'color': 'var(--input-text)',
|
||||
@ -1311,12 +1228,13 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
})
|
||||
]),
|
||||
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-button", {
|
||||
id: 'cm-nodeinfo-button',
|
||||
type: "button",
|
||||
textContent: "Nodes Info",
|
||||
onclick: () => { window.open("https://ltdrdata.github.io/", "comfyui-node-info"); }
|
||||
}),
|
||||
$el("br", {}, []),
|
||||
];
|
||||
|
||||
var textarea = document.createElement("div");
|
||||
@ -1331,23 +1249,31 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
const content = $el("div.cm-menu-container",
|
||||
[
|
||||
$el("div.cm-menu-column.gap-2", [...this.createControlsLeft()]),
|
||||
$el("div.cm-menu-column.gap-2", [...this.createControlsMid()]),
|
||||
$el("div.cm-menu-column.gap-2", [...this.createControlsRight()])
|
||||
]
|
||||
);
|
||||
const close_button = $el("button", { id: "cm-close-button", type: "button", textContent: "Close", onclick: () => this.close() });
|
||||
|
||||
const frame = buildGuiFrame(
|
||||
'cm-manager-dialog', // dialog id
|
||||
`ComfyUI Manager ${manager_version}`, // dialog title
|
||||
"i.mdi.mdi-puzzle", // dialog icon class to show before title
|
||||
content, // dialog content element
|
||||
this
|
||||
); // send this so we can attach close functions
|
||||
const content =
|
||||
$el("div.comfy-modal-content",
|
||||
[
|
||||
$el("tr.cm-title", {}, [
|
||||
$el("font", {size:6, color:"white"}, [`ComfyUI Manager ${manager_version}`])]
|
||||
),
|
||||
$el("br", {}, []),
|
||||
$el("div.cm-menu-container",
|
||||
[
|
||||
$el("div.cm-menu-column", [...this.createControlsLeft()]),
|
||||
$el("div.cm-menu-column", [...this.createControlsMid()]),
|
||||
$el("div.cm-menu-column", [...this.createControlsRight()])
|
||||
]),
|
||||
|
||||
this.element = frame;
|
||||
$el("br", {}, []),
|
||||
close_button,
|
||||
]
|
||||
);
|
||||
|
||||
content.style.width = '100%';
|
||||
content.style.height = '100%';
|
||||
|
||||
this.element = $el("div.comfy-modal", { id:'cm-manager-dialog', parent: document.body }, [ content ]);
|
||||
}
|
||||
|
||||
get isVisible() {
|
||||
@ -1355,7 +1281,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
|
||||
show() {
|
||||
this.element.style.display = "flex";
|
||||
this.element.style.display = "block";
|
||||
}
|
||||
|
||||
toggleVisibility() {
|
||||
|
||||
@ -1,9 +1,8 @@
|
||||
.cn-manager {
|
||||
--grid-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
|
||||
z-index: 1099;
|
||||
width: 80vw;
|
||||
height: 75vh;
|
||||
min-height: 30em;
|
||||
width: 80%;
|
||||
height: 80%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
@ -11,7 +10,6 @@
|
||||
font-family: arial, sans-serif;
|
||||
text-underline-offset: 3px;
|
||||
outline: none;
|
||||
margin: calc(var(--spacing)*2);
|
||||
}
|
||||
|
||||
.cn-manager .cn-flex-auto {
|
||||
@ -19,21 +17,17 @@
|
||||
}
|
||||
|
||||
.cn-manager button {
|
||||
width: auto;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
font-size: 16px;
|
||||
color: var(--input-text);
|
||||
background-color: var(--comfy-input-bg);
|
||||
border-radius: 8px;
|
||||
border-color: var(--border-color);
|
||||
border-style: solid;
|
||||
margin: 0;
|
||||
padding: 4px 8px;
|
||||
min-width: 100px;
|
||||
}
|
||||
|
||||
.cn-manager button:hover {
|
||||
filter: brightness(125%);
|
||||
}
|
||||
|
||||
.cn-manager button:disabled,
|
||||
.cn-manager input:disabled,
|
||||
.cn-manager select:disabled {
|
||||
@ -46,13 +40,8 @@
|
||||
|
||||
.cn-manager .cn-manager-restart {
|
||||
display: none;
|
||||
background-color: #500000 !important;
|
||||
border-color: #88181b !important;
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.cn-manager .cn-manager-restart:hover {
|
||||
background-color: #88181b !important;
|
||||
background-color: #500000;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.cn-manager .cn-manager-stop {
|
||||
@ -90,6 +79,7 @@
|
||||
flex-wrap: wrap;
|
||||
gap: 5px;
|
||||
align-items: center;
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
.cn-manager-header label {
|
||||
@ -101,32 +91,16 @@
|
||||
.cn-manager-filter {
|
||||
height: 28px;
|
||||
line-height: 28px;
|
||||
|
||||
cursor: pointer;
|
||||
padding: 0.5em 0.5em;
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 6px;
|
||||
background: var(--comfy-input-bg);
|
||||
}
|
||||
|
||||
.cn-manager-filter:hover {
|
||||
filter: brightness(125%);
|
||||
}
|
||||
|
||||
.cn-manager-keywords {
|
||||
height: 28px;
|
||||
line-height: 28px;
|
||||
padding: 0 5px 0 26px;
|
||||
background: var(--comfy-input-bg);
|
||||
background-size: 16px;
|
||||
background-position: 5px center;
|
||||
background-repeat: no-repeat;
|
||||
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20viewBox%3D%220%200%2024%2024%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20pointer-events%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23888%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%222%22%20d%3D%22m21%2021-4.486-4.494M19%2010.5a8.5%208.5%200%201%201-17%200%208.5%208.5%200%200%201%2017%200%22%2F%3E%3C%2Fsvg%3E");
|
||||
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 6px;
|
||||
|
||||
outline-color: transparent;
|
||||
}
|
||||
|
||||
.cn-manager-status {
|
||||
@ -614,10 +588,6 @@
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.cn-install-buttons button {
|
||||
padding: 4px 8px;
|
||||
}
|
||||
|
||||
.cn-selected-buttons {
|
||||
display: flex;
|
||||
gap: 5px;
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
import { app } from "../../scripts/app.js";
|
||||
import { ComfyDialog, $el } from "../../scripts/ui.js";
|
||||
import { api } from "../../scripts/api.js";
|
||||
import { buildGuiFrameCustomHeader, createSettingsCombo } from "./comfyui-gui-builder.js";
|
||||
|
||||
import {
|
||||
manager_instance, rebootAPI, install_via_git_url,
|
||||
@ -19,19 +18,32 @@ loadCss("./custom-nodes-manager.css");
|
||||
const gridId = "node";
|
||||
|
||||
const pageHtml = `
|
||||
<div class="cn-manager cn-manager-dark">
|
||||
<div class="cn-manager-grid"></div>
|
||||
<div class="cn-manager-selection"></div>
|
||||
<div class="cn-manager-message"></div>
|
||||
<div class="cn-manager-footer">
|
||||
<button class="cn-manager-restart p-button p-component">Restart</button>
|
||||
<button class="cn-manager-stop p-button p-component">Stop</button>
|
||||
<div class="cn-flex-auto"></div>
|
||||
<button class="cn-manager-used-in-workflow p-button p-component">Used In Workflow</button>
|
||||
<button class="cn-manager-check-update p-button p-component">Check Update</button>
|
||||
<button class="cn-manager-check-missing p-button p-component">Check Missing</button>
|
||||
<button class="cn-manager-install-url p-button p-component">Install via Git URL</button>
|
||||
</div>
|
||||
<div class="cn-manager-header">
|
||||
<label>Filter
|
||||
<select class="cn-manager-filter"></select>
|
||||
</label>
|
||||
<input class="cn-manager-keywords" type="search" placeholder="Search" />
|
||||
<div class="cn-manager-status"></div>
|
||||
<div class="cn-flex-auto"></div>
|
||||
<div class="cn-manager-channel"></div>
|
||||
</div>
|
||||
<div class="cn-manager-grid"></div>
|
||||
<div class="cn-manager-selection"></div>
|
||||
<div class="cn-manager-message"></div>
|
||||
<div class="cn-manager-footer">
|
||||
<button class="cn-manager-back">
|
||||
<svg class="arrow-icon" width="14" height="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M2 8H18M2 8L8 2M2 8L8 14" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
Back
|
||||
</button>
|
||||
<button class="cn-manager-restart">Restart</button>
|
||||
<button class="cn-manager-stop">Stop</button>
|
||||
<div class="cn-flex-auto"></div>
|
||||
<button class="cn-manager-used-in-workflow">Used In Workflow</button>
|
||||
<button class="cn-manager-check-update">Check Update</button>
|
||||
<button class="cn-manager-check-missing">Check Missing</button>
|
||||
<button class="cn-manager-install-url">Install via Git URL</button>
|
||||
</div>
|
||||
`;
|
||||
|
||||
@ -77,26 +89,11 @@ export class CustomNodesManager {
|
||||
}
|
||||
|
||||
init() {
|
||||
const header = $el("div.cn-manager-header.px-2", {}, [
|
||||
// $el("label", {}, [
|
||||
// $el("span", { textContent: "Filter" }),
|
||||
// $el("select.cn-manager-filter")
|
||||
// ]),
|
||||
createSettingsCombo("Filter", $el("select.cn-manager-filter")),
|
||||
$el("input.cn-manager-keywords.p-inputtext.p-component", { type: "search", placeholder: "Search" }),
|
||||
$el("div.cn-manager-status"),
|
||||
$el("div.cn-flex-auto"),
|
||||
$el("div.cn-manager-channel")
|
||||
]);
|
||||
|
||||
const frame = buildGuiFrameCustomHeader(
|
||||
'cn-manager-dialog', // dialog id
|
||||
header, // custom header element
|
||||
pageHtml, // dialog content element
|
||||
this
|
||||
); // send this so we can attach close functions
|
||||
|
||||
this.element = frame;
|
||||
this.element = $el("div", {
|
||||
parent: document.body,
|
||||
className: "comfy-modal cn-manager"
|
||||
});
|
||||
this.element.innerHTML = pageHtml;
|
||||
this.element.setAttribute("tabindex", 0);
|
||||
this.element.focus();
|
||||
|
||||
@ -375,7 +372,7 @@ export class CustomNodesManager {
|
||||
|
||||
return list.map(id => {
|
||||
const bt = buttons[id];
|
||||
return `<button class="cn-btn-${id} p-button p-component" group="${action}" mode="${bt.mode}">${bt.label}</button>`;
|
||||
return `<button class="cn-btn-${id}" group="${action}" mode="${bt.mode}">${bt.label}</button>`;
|
||||
}).join("");
|
||||
}
|
||||
|
||||
@ -658,6 +655,7 @@ export class CustomNodesManager {
|
||||
}
|
||||
|
||||
renderGrid() {
|
||||
|
||||
// update theme
|
||||
const globalStyle = window.getComputedStyle(document.body);
|
||||
this.colorVars = {
|
||||
|
||||
@ -1,15 +1,13 @@
|
||||
.cmm-manager {
|
||||
--grid-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
|
||||
z-index: 1099;
|
||||
width: 80vw;
|
||||
height: 75vh;
|
||||
min-height: 30em;
|
||||
width: 80%;
|
||||
height: 80%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
color: var(--fg-color);
|
||||
font-family: arial, sans-serif;
|
||||
margin: calc(var(--spacing)*2);
|
||||
}
|
||||
|
||||
.cmm-manager .cmm-flex-auto {
|
||||
@ -20,15 +18,14 @@
|
||||
font-size: 16px;
|
||||
color: var(--input-text);
|
||||
background-color: var(--comfy-input-bg);
|
||||
border-radius: 8px;
|
||||
border-color: var(--border-color);
|
||||
border-style: solid;
|
||||
margin: 0;
|
||||
padding: 4px 8px;
|
||||
min-width: 100px;
|
||||
}
|
||||
|
||||
.cmm-manager button:hover {
|
||||
filter: brightness(125%);
|
||||
}
|
||||
|
||||
.cmm-manager button:disabled,
|
||||
.cmm-manager input:disabled,
|
||||
.cmm-manager select:disabled {
|
||||
@ -41,7 +38,7 @@
|
||||
|
||||
.cmm-manager .cmm-manager-refresh {
|
||||
display: none;
|
||||
background-color: #000080 !important;
|
||||
background-color: #000080;
|
||||
color: white;
|
||||
}
|
||||
|
||||
@ -56,6 +53,7 @@
|
||||
flex-wrap: wrap;
|
||||
gap: 5px;
|
||||
align-items: center;
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
.cmm-manager-header label {
|
||||
@ -69,34 +67,16 @@
|
||||
.cmm-manager-filter {
|
||||
height: 28px;
|
||||
line-height: 28px;
|
||||
|
||||
cursor: pointer;
|
||||
padding: 0.5em 0.5em;
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 6px;
|
||||
background: var(--comfy-input-bg);
|
||||
}
|
||||
|
||||
.cmm-manager-type:hover,
|
||||
.cmm-manager-base:hover,
|
||||
.cmm-manager-filter:hover {
|
||||
filter: brightness(125%);
|
||||
}
|
||||
|
||||
.cmm-manager-keywords {
|
||||
height: 28px;
|
||||
line-height: 28px;
|
||||
padding: 0 5px 0 26px;
|
||||
background: var(--comfy-input-bg);
|
||||
background-size: 16px;
|
||||
background-position: 5px center;
|
||||
background-repeat: no-repeat;
|
||||
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20viewBox%3D%220%200%2024%2024%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20pointer-events%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23888%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%222%22%20d%3D%22m21%2021-4.486-4.494M19%2010.5a8.5%208.5%200%201%201-17%200%208.5%208.5%200%200%201%2017%200%22%2F%3E%3C%2Fsvg%3E");
|
||||
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 6px;
|
||||
|
||||
outline-color: transparent;
|
||||
}
|
||||
|
||||
.cmm-manager-status {
|
||||
@ -168,10 +148,6 @@
|
||||
color: white;
|
||||
}
|
||||
|
||||
.cmm-btn-install {
|
||||
padding: 4px 8px;
|
||||
}
|
||||
|
||||
.cmm-btn-download {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
|
||||
@ -9,22 +9,39 @@ import { api } from "../../scripts/api.js";
|
||||
|
||||
// https://cenfun.github.io/turbogrid/api.html
|
||||
import TG from "./turbogrid.esm.js";
|
||||
import { buildGuiFrameCustomHeader, createSettingsCombo } from "./comfyui-gui-builder.js";
|
||||
|
||||
loadCss("./model-manager.css");
|
||||
|
||||
const gridId = "model";
|
||||
|
||||
const pageHtml = `
|
||||
<div class="cmm-manager cmm-manager-dark">
|
||||
<div class="cmm-manager-grid"></div>
|
||||
<div class="cmm-manager-selection"></div>
|
||||
<div class="cmm-manager-message"></div>
|
||||
<div class="cmm-manager-footer">
|
||||
<button class="cmm-manager-refresh p-button p-component">Refresh</button>
|
||||
<button class="cmm-manager-stop p-button p-component">Stop</button>
|
||||
<div class="cmm-flex-auto"></div>
|
||||
</div>
|
||||
<div class="cmm-manager-header">
|
||||
<label>Filter
|
||||
<select class="cmm-manager-filter"></select>
|
||||
</label>
|
||||
<label>Type
|
||||
<select class="cmm-manager-type"></select>
|
||||
</label>
|
||||
<label>Base
|
||||
<select class="cmm-manager-base"></select>
|
||||
</label>
|
||||
<input class="cmm-manager-keywords" type="search" placeholder="Search" />
|
||||
<div class="cmm-manager-status"></div>
|
||||
<div class="cmm-flex-auto"></div>
|
||||
</div>
|
||||
<div class="cmm-manager-grid"></div>
|
||||
<div class="cmm-manager-selection"></div>
|
||||
<div class="cmm-manager-message"></div>
|
||||
<div class="cmm-manager-footer">
|
||||
<button class="cmm-manager-back">
|
||||
<svg class="arrow-icon" width="14" height="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M2 8H18M2 8L8 2M2 8L8 14" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
Back
|
||||
</button>
|
||||
<button class="cmm-manager-refresh">Refresh</button>
|
||||
<button class="cmm-manager-stop">Stop</button>
|
||||
<div class="cmm-flex-auto"></div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
@ -47,23 +64,11 @@ export class ModelManager {
|
||||
}
|
||||
|
||||
init() {
|
||||
const header = $el("div.cmm-manager-header", {}, [
|
||||
createSettingsCombo("Filter", $el("select.cmm-manager-filter")),
|
||||
createSettingsCombo("Type", $el("select.cmm-manager-type")),
|
||||
createSettingsCombo("Base", $el("select.cmm-manager-base")),
|
||||
$el("input.cmm-manager-keywords.p-inputtext.p-component", { type: "search", placeholder: "Search" }),
|
||||
$el("div.cmm-manager-status"),
|
||||
$el("div.cmm-flex-auto")
|
||||
]);
|
||||
|
||||
const frame = buildGuiFrameCustomHeader(
|
||||
'cmm-manager-dialog', // dialog id
|
||||
header, // custom header element
|
||||
pageHtml, // dialog content element
|
||||
this
|
||||
); // send this so we can attach close functions
|
||||
|
||||
this.element = frame;
|
||||
this.element = $el("div", {
|
||||
parent: document.body,
|
||||
className: "comfy-modal cmm-manager"
|
||||
});
|
||||
this.element.innerHTML = pageHtml;
|
||||
this.initFilter();
|
||||
this.bindEvents();
|
||||
this.initGrid();
|
||||
@ -342,7 +347,7 @@ export class ModelManager {
|
||||
if (installed === "True") {
|
||||
return `<div class="cmm-icon-passed">${icons.passed}</div>`;
|
||||
}
|
||||
return `<button class="cmm-btn-install p-button p-component" mode="install">Install</button>`;
|
||||
return `<button class="cmm-btn-install" mode="install">Install</button>`;
|
||||
}
|
||||
}, {
|
||||
id: 'url',
|
||||
@ -415,7 +420,7 @@ export class ModelManager {
|
||||
}
|
||||
|
||||
this.selectedModels = selectedList;
|
||||
this.showSelection(`<span>Selected <b>${selectedList.length}</b> models <button class="cmm-btn-install p-button p-component" mode="install">Install</button>`);
|
||||
this.showSelection(`<span>Selected <b>${selectedList.length}</b> models <button class="cmm-btn-install" mode="install">Install</button>`);
|
||||
}
|
||||
|
||||
focusInstall(item) {
|
||||
|
||||
@ -1,65 +0,0 @@
|
||||
.snapshot-manager {
|
||||
--grid-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
|
||||
z-index: 1099;
|
||||
width: 80vw;
|
||||
height: 75vh;
|
||||
min-height: 30em;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
color: var(--fg-color);
|
||||
font-family: arial, sans-serif;
|
||||
text-underline-offset: 3px;
|
||||
outline: none;
|
||||
margin: calc(var(--spacing)*2);
|
||||
}
|
||||
|
||||
.snapshot-manager button {
|
||||
width: auto;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
font-size: 16px;
|
||||
color: var(--input-text);
|
||||
background-color: var(--comfy-input-bg);
|
||||
border-color: var(--border-color);
|
||||
margin: 0;
|
||||
min-width: 100px;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
|
||||
.snapshot-manager .snapshot-restore-btn {
|
||||
background-color: #00158f !important;
|
||||
border-color: #2025b9 !important;
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.snapshot-manager .snapshot-remove-btn {
|
||||
background-color: #970000 !important;
|
||||
border-color: #be2127 !important;
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.snapshot-manager button:hover {
|
||||
filter: brightness(125%);
|
||||
}
|
||||
|
||||
.snapshot-manager .data-btns {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: calc(var(--spacing)*2);
|
||||
padding: calc(var(--spacing)*2);
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.snapshot-footer {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 10px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.snapshot-manager .cn-flex-auto {
|
||||
flex: auto;
|
||||
}
|
||||
@ -1,10 +1,8 @@
|
||||
import { app } from "../../scripts/app.js";
|
||||
import { api } from "../../scripts/api.js"
|
||||
import { ComfyDialog, $el } from "../../scripts/ui.js";
|
||||
import { manager_instance, rebootAPI, show_message, handle403Response, loadCss } from "./common.js";
|
||||
import { buildGuiFrame } from "./comfyui-gui-builder.js";
|
||||
import { manager_instance, rebootAPI, show_message, handle403Response } from "./common.js";
|
||||
|
||||
loadCss("./snapshot.css");
|
||||
|
||||
async function restore_snapshot(target) {
|
||||
if(SnapshotManager.instance) {
|
||||
@ -29,7 +27,7 @@ async function restore_snapshot(target) {
|
||||
}
|
||||
finally {
|
||||
await SnapshotManager.instance.invalidateControl();
|
||||
SnapshotManager.instance.updateMessage("<BR>To apply the snapshot, please <button id='cm-reboot-button2' class='p-button p-component'>RESTART</button> ComfyUI. And refresh browser.", 'cm-reboot-button2');
|
||||
SnapshotManager.instance.updateMessage("<BR>To apply the snapshot, please <button id='cm-reboot-button2' class='cm-small-button'>RESTART</button> ComfyUI. And refresh browser.", 'cm-reboot-button2');
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -90,8 +88,6 @@ export class SnapshotManager extends ComfyDialog {
|
||||
message_box = null;
|
||||
data = null;
|
||||
|
||||
content = $el("div.snapshot-manager");
|
||||
|
||||
clear() {
|
||||
this.restore_buttons = [];
|
||||
this.message_box = null;
|
||||
@ -100,18 +96,9 @@ export class SnapshotManager extends ComfyDialog {
|
||||
|
||||
constructor(app, manager_dialog) {
|
||||
super();
|
||||
// this.manager_dialog = manager_dialog;
|
||||
this.manager_dialog = manager_dialog;
|
||||
this.search_keyword = '';
|
||||
|
||||
const frame = buildGuiFrame(
|
||||
'snapshot-manager-dialog', // dialog id
|
||||
'Snapshot Manager', // title
|
||||
'i.mdi.mdi-puzzle', // icon class
|
||||
this.content, // dialog content element
|
||||
this
|
||||
); // send this so we can attach close functions
|
||||
|
||||
this.element = frame;
|
||||
this.element = $el("div.comfy-modal", { parent: document.body }, []);
|
||||
}
|
||||
|
||||
async remove_item() {
|
||||
@ -122,7 +109,7 @@ export class SnapshotManager extends ComfyDialog {
|
||||
|
||||
createControls() {
|
||||
return [
|
||||
$el("button.p-button.p-component", {
|
||||
$el("button.cm-small-button", {
|
||||
type: "button",
|
||||
textContent: "Close",
|
||||
onclick: () => { this.close(); }
|
||||
@ -145,8 +132,8 @@ export class SnapshotManager extends ComfyDialog {
|
||||
this.clear();
|
||||
this.data = (await getSnapshotList()).items;
|
||||
|
||||
while (this.content.children.length) {
|
||||
this.content.removeChild(this.content.children[0]);
|
||||
while (this.element.children.length) {
|
||||
this.element.removeChild(this.element.children[0]);
|
||||
}
|
||||
|
||||
await this.createGrid();
|
||||
@ -217,21 +204,20 @@ export class SnapshotManager extends ComfyDialog {
|
||||
data2.innerHTML = ` ${data}`;
|
||||
var data_button = document.createElement('td');
|
||||
data_button.style.textAlign = "center";
|
||||
data_button.className = "data-btns";
|
||||
|
||||
var restoreBtn = document.createElement('button');
|
||||
restoreBtn.className = "snapshot-restore-btn p-button p-component";
|
||||
restoreBtn.innerHTML = 'Restore';
|
||||
restoreBtn.style.width = "100px";
|
||||
restoreBtn.style.backgroundColor = 'blue';
|
||||
|
||||
restoreBtn.addEventListener('click', function() {
|
||||
restore_snapshot(data);
|
||||
});
|
||||
|
||||
var removeBtn = document.createElement('button');
|
||||
removeBtn.className = "snapshot-remove-btn p-button p-component";
|
||||
removeBtn.innerHTML = 'Remove';
|
||||
removeBtn.style.width = "100px";
|
||||
removeBtn.style.backgroundColor = 'red';
|
||||
|
||||
removeBtn.addEventListener('click', function() {
|
||||
remove_snapshot(data);
|
||||
@ -255,14 +241,13 @@ export class SnapshotManager extends ComfyDialog {
|
||||
let self = this;
|
||||
const panel = document.createElement('div');
|
||||
panel.style.width = "100%";
|
||||
panel.style.height = "100%";
|
||||
panel.appendChild(grid);
|
||||
|
||||
function handleResize() {
|
||||
const parentHeight = self.element.clientHeight;
|
||||
const gridHeight = parentHeight - 200;
|
||||
|
||||
// grid.style.height = gridHeight + "px";
|
||||
grid.style.height = gridHeight + "px";
|
||||
}
|
||||
window.addEventListener("resize", handleResize);
|
||||
|
||||
@ -271,17 +256,25 @@ export class SnapshotManager extends ComfyDialog {
|
||||
grid.style.width = "100%";
|
||||
grid.style.height = "100%";
|
||||
grid.style.overflowY = "scroll";
|
||||
|
||||
this.content.appendChild(panel);
|
||||
this.element.style.height = "85%";
|
||||
this.element.style.width = "80%";
|
||||
this.element.appendChild(panel);
|
||||
|
||||
handleResize();
|
||||
}
|
||||
|
||||
async createBottomControls() {
|
||||
var close_button = document.createElement("button");
|
||||
close_button.className = "cm-small-button";
|
||||
close_button.innerHTML = "Close";
|
||||
close_button.onclick = () => { this.close(); }
|
||||
close_button.style.display = "inline-block";
|
||||
|
||||
var save_button = document.createElement("button");
|
||||
save_button.className = "p-button p-component";
|
||||
save_button.className = "cm-small-button";
|
||||
save_button.innerHTML = "Save snapshot";
|
||||
save_button.onclick = () => { save_current_snapshot(); }
|
||||
save_button.style.display = "inline-block";
|
||||
save_button.style.horizontalAlign = "right";
|
||||
save_button.style.width = "170px";
|
||||
|
||||
@ -289,19 +282,15 @@ export class SnapshotManager extends ComfyDialog {
|
||||
this.message_box.style.height = '60px';
|
||||
this.message_box.style.verticalAlign = 'middle';
|
||||
|
||||
const footer = $el("div.snapshot-footer");
|
||||
const spacer = $el("div.cn-flex-auto");
|
||||
footer.appendChild(spacer);
|
||||
footer.appendChild(save_button);
|
||||
|
||||
this.content.appendChild(this.message_box);
|
||||
this.content.appendChild(footer);
|
||||
this.element.appendChild(this.message_box);
|
||||
this.element.appendChild(close_button);
|
||||
this.element.appendChild(save_button);
|
||||
}
|
||||
|
||||
async show() {
|
||||
try {
|
||||
this.invalidateControl();
|
||||
this.element.style.display = "flex";
|
||||
this.element.style.display = "block";
|
||||
this.element.style.zIndex = 1099;
|
||||
}
|
||||
catch(exception) {
|
||||
|
||||
@ -1,335 +1,5 @@
|
||||
{
|
||||
"custom_nodes": [
|
||||
{
|
||||
"author": "love530love",
|
||||
"title": "[WIP] ComfyUI-TorchMonitor",
|
||||
"reference": "https://github.com/love530love/ComfyUI-TorchMonitor",
|
||||
"files": [
|
||||
"https://github.com/love530love/ComfyUI-TorchMonitor"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Fixed-position real-time monitor for ComfyUI displaying CPU, RAM, VRAM, and GPU temperature metrics with zero configuration and single-file installation.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "Enferlain",
|
||||
"title": "ComfyUI-SamplerCustom-3Decimals",
|
||||
"reference": "https://github.com/Enferlain/ComfyUI-SamplerCustom-3Decimals",
|
||||
"files": [
|
||||
"https://github.com/Enferlain/ComfyUI-SamplerCustom-3Decimals"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI sampler node with custom 3 decimals precision for sampling parameters. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "lfelipegg",
|
||||
"title": "[WIP] lfgg_custom_nodes_comfyui",
|
||||
"reference": "https://github.com/lfelipegg/lfgg_custom_nodes_comfyui",
|
||||
"files": [
|
||||
"https://github.com/lfelipegg/lfgg_custom_nodes_comfyui"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "LFGG custom nodes for ComfyUI providing resolution-first utilities, latent sizing by aspect ratio, and divisibility-aware image processing.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "saltchicken",
|
||||
"title": "ComfyUI-Selector",
|
||||
"reference": "https://github.com/saltchicken/ComfyUI-Selector",
|
||||
"files": [
|
||||
"https://github.com/saltchicken/ComfyUI-Selector"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI node providing simple selector functionality. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "saltchicken",
|
||||
"title": "ComfyUI-Video-Utils",
|
||||
"reference": "https://github.com/saltchicken/ComfyUI-Video-Utils",
|
||||
"files": [
|
||||
"https://github.com/saltchicken/ComfyUI-Video-Utils"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes for video processing including FinalFrameSelector and VideoMerge functionality. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "EricRorich",
|
||||
"title": "[WIP] ComfyUI-MegaTran-cutom-node",
|
||||
"reference": "https://github.com/EricRorich/ComfyUI-MegaTran-cutom-node",
|
||||
"files": [
|
||||
"https://github.com/EricRorich/ComfyUI-MegaTran-cutom-node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node applying image transformations (scaling, rotation, translation) around a pivot point with optional canvas expansion and pivot visualization. (Description by CC)\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "OhSeongHyeon",
|
||||
"title": "comfyui-random-image-size",
|
||||
"reference": "https://github.com/OhSeongHyeon/comfyui-random-image-size",
|
||||
"files": [
|
||||
"https://github.com/OhSeongHyeon/comfyui-random-image-size"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI Random Image Size"
|
||||
},
|
||||
{
|
||||
"author": "Enferlain",
|
||||
"title": "ComfyUI-Model-Comparison [WIP]",
|
||||
"reference": "https://github.com/Enferlain/ComfyUI-Model-Comparison",
|
||||
"files": [
|
||||
"https://github.com/Enferlain/ComfyUI-Model-Comparison"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI node for comparing multiple models side-by-side. (Description by CC)\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "AMTPorn",
|
||||
"title": "comfyui_amt",
|
||||
"reference": "https://github.com/AMTPorn/comfyui_amt",
|
||||
"files": [
|
||||
"https://github.com/AMTPorn/comfyui_amt"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: AMTStringDeduplication"
|
||||
},
|
||||
{
|
||||
"author": "gajjar4",
|
||||
"title": "ComfyUI-Qwen-Image-i2L [UNSAFE]",
|
||||
"reference": "https://github.com/gajjar4/ComfyUI-Qwen-Image-i2L",
|
||||
"files": [
|
||||
"https://github.com/gajjar4/ComfyUI-Qwen-Image-i2L"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A fully optimized ComfyUI custom node for Qwen-Image-i2L (Image-to-LoRA) that extracts style, composition, or details from images and saves them as lightweight LoRA files with intelligent VRAM optimization. (Description by CC)[w/This nodepack contains a node that has a vulnerability allowing write to arbitrary file paths.]"
|
||||
},
|
||||
{
|
||||
"author": "edvardtoth",
|
||||
"title": "ComfyUI-ETNodes",
|
||||
"reference": "https://github.com/edvardtoth/ComfyUI-ETNodes",
|
||||
"files": [
|
||||
"https://github.com/edvardtoth/ComfyUI-ETNodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: ETNodes-Color-Selector, ETNodes-Gemini-API-Image, ETNodes-Gemini-API-Text, ETNodes-List-Items, ETNodes-List-Selector, ETNodes-Text-Previe"
|
||||
},
|
||||
{
|
||||
"author": "jtydhr88",
|
||||
"title": "ComfyUI-PolotnoCanvasEditor [UNSAFE]",
|
||||
"reference": "https://github.com/jtydhr88/ComfyUI-PolotnoCanvasEditor",
|
||||
"files": [
|
||||
"https://github.com/jtydhr88/ComfyUI-PolotnoCanvasEditor"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Integrates Polotno Canvas Editor into ComfyUI for advanced image editing and design.[w/This nodepack contains a path traversal vulnerability.]"
|
||||
},
|
||||
{
|
||||
"author": "Taremin",
|
||||
"title": "comfyui-remove-print",
|
||||
"reference": "https://github.com/Taremin/comfyui-remove-print",
|
||||
"files": [
|
||||
"https://github.com/Taremin/comfyui-remove-print"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI extension for removing or suppressing print statements in node output. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "JiangAogo",
|
||||
"title": "ComfyUI-Gemini-API [WIP]",
|
||||
"reference": "https://github.com/JiangAogo/ComfyUI-Gemini-API",
|
||||
"files": [
|
||||
"https://github.com/JiangAogo/ComfyUI-Gemini-API"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for Google Gemini API integration, supporting both text generation (LLM) and image generation.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "AprEcho",
|
||||
"title": "ComfyUI-RandomSeed",
|
||||
"reference": "https://github.com/AprEcho/ComfyUI-RandomSeed",
|
||||
"files": [
|
||||
"https://github.com/AprEcho/ComfyUI-RandomSeed"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Generates random seed values for ComfyUI workflows. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "Suzu008",
|
||||
"title": "ComfyUI-ImageCritic",
|
||||
"reference": "https://github.com/Suzu008/ComfyUI-ImageCritic",
|
||||
"files": [
|
||||
"https://github.com/Suzu008/ComfyUI-ImageCritic"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node for image analysis and evaluation. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "Spicely",
|
||||
"title": "[WIP] ComfyUI-Luma",
|
||||
"reference": "https://github.com/Spicely/ComfyUI-Luma",
|
||||
"files": [
|
||||
"https://github.com/Spicely/ComfyUI-Luma"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI utility providing video and audio processing capabilities including text watermarking, audio-video separation, and audio-to-subtitle conversion. (Description by CC)\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "SSYCloud",
|
||||
"title": "comfyui-ssy-syncapi [WIP]",
|
||||
"reference": "https://github.com/SSYCloud/comfyui-ssy-syncapi",
|
||||
"files": [
|
||||
"https://github.com/SSYCloud/comfyui-ssy-syncapi"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Powerful ComfyUI custom node collection providing 4 dedicated nodes to access SSY Cloud synchronous image generation and processing models including Google Gemini, ByteDance Doubao, OpenAI, and image enhancement APIs. (Description by CC)\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "LMietkiewicz",
|
||||
"title": "HiggsfieldAPI_Node",
|
||||
"reference": "https://github.com/LMietkiewicz/HiggsfieldAPI_Node",
|
||||
"files": [
|
||||
"https://github.com/LMietkiewicz/HiggsfieldAPI_Node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node for Higgsfield API integration. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "starsFriday",
|
||||
"title": "ComfyUI-LongCat-Image [WIP]",
|
||||
"reference": "https://github.com/starsFriday/ComfyUI-LongCat-Image",
|
||||
"files": [
|
||||
"https://github.com/starsFriday/ComfyUI-LongCat-Image"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI wrapper nodes for the LongCat-Image text-to-image and image-editing pipelines with Python 3.12 support.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "logicalor",
|
||||
"title": "comfyui_mv_adapter [WIP]",
|
||||
"reference": "https://github.com/logicalor/comfyui_mv_adapter",
|
||||
"files": [
|
||||
"https://github.com/logicalor/comfyui_mv_adapter"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "MV-Adapter nodes for ComfyUI - Multi-view image generation\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "rafstahelin",
|
||||
"title": "ComfyUI_KieNanoBananaPro",
|
||||
"reference": "https://github.com/rafstahelin/ComfyUI_KieNanoBananaPro",
|
||||
"files": [
|
||||
"https://github.com/rafstahelin/ComfyUI_KieNanoBananaPro"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes for processing and filtering using KieNanoBananaPro algorithm. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "jinchanz",
|
||||
"title": "ComfyUI-Midjourney",
|
||||
"reference": "https://github.com/jinchanz/ComfyUI-Midjourney",
|
||||
"files": [
|
||||
"https://github.com/jinchanz/ComfyUI-Midjourney"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI integration for Midjourney API with nodes for submitting requests, polling results, and extracting JSON data. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "saltchicken",
|
||||
"title": "ComfyUI-Local-Loader",
|
||||
"reference": "https://github.com/saltchicken/ComfyUI-Local-Loader",
|
||||
"files": [
|
||||
"https://github.com/saltchicken/ComfyUI-Local-Loader"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for loading images from specified directories and file paths. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "satyasairazole",
|
||||
"title": "ComfyUI-Turbandetection [WIP]",
|
||||
"reference": "https://github.com/satyasairazole/ComfyUI-Turbandetection",
|
||||
"files": [
|
||||
"https://github.com/satyasairazole/ComfyUI-Turbandetection"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI node for detecting turbans in images using computer vision. (Description by CC)\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "dougbtv",
|
||||
"title": "comfyui-vllm-omni",
|
||||
"reference": "https://github.com/dougbtv/comfyui-vllm-omni",
|
||||
"files": [
|
||||
"https://github.com/dougbtv/comfyui-vllm-omni"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node for vLLM-Omni text-to-image generation"
|
||||
},
|
||||
{
|
||||
"author": "u5dev",
|
||||
"title": "ComfyUI_u5_EasyScripter [UNSAFE]",
|
||||
"reference": "https://github.com/u5dev/ComfyUI_u5_EasyScripter",
|
||||
"files": [
|
||||
"https://github.com/u5dev/ComfyUI_u5_EasyScripter"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "EASY VBA-style script for ComfyUI. Anything you want be in 1 node. Conditional branching, iteration, prompt generation, parameter adjustment, memory release, file input/output, Using HTTP RestAPI ... with 100+ built-in functions![w/This nodepack has RCE, SSRF, and arbitrary file read vulnerabilities.]"
|
||||
},
|
||||
{
|
||||
"author": "stalkervr",
|
||||
"title": "ComfyUI-StalkerVr",
|
||||
"reference": "https://github.com/stalkervr/ComfyUI-StalkerVr",
|
||||
"files": [
|
||||
"https://github.com/stalkervr/ComfyUI-StalkerVr"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for image processing, aspect ratio fixing, batch cropping, grid manipulation, JSON handling, and value extraction. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "baoanhng",
|
||||
"title": "ComfyUI-utils",
|
||||
"reference": "https://github.com/baoanhng/ComfyUI-utils",
|
||||
"files": [
|
||||
"https://github.com/baoanhng/ComfyUI-utils"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Provides text utility nodes (TextJoiner, TextSplitter) for ComfyUI workflows. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "xuchenxu168",
|
||||
"title": "[WIP] comfyui_meituan_image",
|
||||
"reference": "https://github.com/xuchenxu168/comfyui_meituan_image",
|
||||
"files": [
|
||||
"https://github.com/xuchenxu168/comfyui_meituan_image"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Generate high-quality images from text prompts with excellent Chinese text rendering,Edit images using natural language instructions..\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "saltchicken",
|
||||
"title": "ComfyUI-Identity-Mixer",
|
||||
"reference": "https://github.com/saltchicken/ComfyUI-Identity-Mixer",
|
||||
"files": [
|
||||
"https://github.com/saltchicken/ComfyUI-Identity-Mixer"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Mixes multiple identity LoRAs with normalized strength."
|
||||
},
|
||||
{
|
||||
"author": "saltchicken",
|
||||
"title": "ComfyUI-Prompter",
|
||||
"reference": "https://github.com/saltchicken/ComfyUI-Prompter",
|
||||
"files": [
|
||||
"https://github.com/saltchicken/ComfyUI-Prompter"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node providing customizable prompt generation capabilities. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "JBKing514",
|
||||
"title": "[WIP] map_comfyui",
|
||||
"reference": "https://github.com/JBKing514/map_comfyui",
|
||||
"files": [
|
||||
"https://github.com/JBKing514/map_comfyui"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom node implementing the Manifold Alignment Protocol (MAP) within ComfyUI, transforming diffusion sampling into a measurable and visualizable geometric process. (Description by CC)\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
"custom_nodes": [
|
||||
{
|
||||
"author": "Nynxz",
|
||||
"title": "ComfyUI_DiffsynthPause",
|
||||
@ -380,6 +50,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node that splits multi-line prompts by line, enabling batch image generation with each line triggering one execution and supporting custom prompt boxes. (Description by CC)\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "ashtar1984",
|
||||
"title": "comfyui-switch-bypass-mute-by-group",
|
||||
"reference": "https://github.com/ashtar1984/comfyui-switch-bypass-mute-by-group",
|
||||
"files": [
|
||||
"https://github.com/ashtar1984/comfyui-switch-bypass-mute-by-group"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node for group-based node switching, bypassing, and muting control. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "rookiestar28",
|
||||
"title": "ComfyUI_Security_Audit",
|
||||
@ -1754,6 +1434,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A powerful ComfyUI extension that helps you focus on selected nodes by highlighting their connections while dimming or hiding unrelated links\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "pizurny",
|
||||
"title": "ComfyUI-Just-DWPose [WIP]",
|
||||
"reference": "https://github.com/pizurny/ComfyUI-Just-DWPose",
|
||||
"files": [
|
||||
"https://github.com/pizurny/ComfyUI-Just-DWPose"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "An advanced DWPose annotator for ComfyUI with TorchScript and ONNX backends, featuring comprehensive pose detection, bone validation, temporal smoothing, and custom visualization tools."
|
||||
},
|
||||
{
|
||||
"author": "pizurny",
|
||||
"title": "ComfyUI Feedback Sampler [WIP]",
|
||||
@ -2174,6 +1864,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: 'Pluto : Auto Crop Faces', 'Pluto : Composite Image', 'Pluto : Float Math', 'Pluto : GetSizeFromImage', 'Pluto : Text Append', ..."
|
||||
},
|
||||
{
|
||||
"author": "lfelipegg",
|
||||
"title": "lfgg_custom_nodes [WIP]",
|
||||
"reference": "https://github.com/lfelipegg/lfgg_custom_nodes",
|
||||
"files": [
|
||||
"https://github.com/lfelipegg/lfgg_custom_nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: ModelMergeCombos\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "lu64k",
|
||||
"title": "ks_nodes",
|
||||
@ -5438,6 +5138,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI implementation of the partfield nvidea segmentation models\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "shinich39",
|
||||
"title": "comfyui-nothing-happened",
|
||||
"reference": "httphttps://github.com/shinich39/comfyui-nothing-happened",
|
||||
"files": [
|
||||
"https://github.com/shinich39/comfyui-nothing-happened"
|
||||
],
|
||||
"description": "Save image and keep metadata.",
|
||||
"install_type": "git-clone"
|
||||
},
|
||||
{
|
||||
"author": "silveroxides",
|
||||
"title": "ComfyUI_ReduxEmbedToolkit",
|
||||
@ -8730,6 +8440,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Gets a random file from a directory. Returns the filpath as a STRING. [w/This node allows access to arbitrary files through the workflow, which could pose a security threat.]"
|
||||
},
|
||||
{
|
||||
"author": "neeltheninja",
|
||||
"title": "ComfyUI-ControlNeXt [WIP]",
|
||||
"reference": "https://github.com/neverbiasu/ComfyUI-ControlNeXt",
|
||||
"files": [
|
||||
"https://github.com/neverbiasu/ComfyUI-ControlNeXt"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "In progress🚧"
|
||||
},
|
||||
{
|
||||
"author": "neeltheninja",
|
||||
"title": "ComfyUI-TextOverlay",
|
||||
|
||||
@ -375,7 +375,6 @@
|
||||
"PD_Image_centerCrop",
|
||||
"PD_JoinStringMultiLine",
|
||||
"PD_LoadImageMetadata",
|
||||
"PD_LoadImageWithMeta",
|
||||
"PD_LoadImagesFromDir",
|
||||
"PD_LoadImagesFromZip",
|
||||
"PD_LoadTextsFromDir",
|
||||
@ -405,7 +404,6 @@
|
||||
"PD_Zip_Simple",
|
||||
"PD_del_word",
|
||||
"PD_empty_word",
|
||||
"PD_if",
|
||||
"PD_image_coversaver",
|
||||
"PD_image_ratio_size",
|
||||
"PD_image_to_text_v1",
|
||||
@ -634,16 +632,6 @@
|
||||
"title_aux": "AIGCZero-comfyui-Qwen_edit-zero"
|
||||
}
|
||||
],
|
||||
"https://github.com/AMTPorn/comfyui_amt": [
|
||||
[
|
||||
"AMTMultiConditionRegexReplace",
|
||||
"AMTReplaceAndMaybeDropString",
|
||||
"AMTStringDeduplication"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui_amt"
|
||||
}
|
||||
],
|
||||
"https://github.com/APZmedia/ComfyUI-folder-parser": [
|
||||
[
|
||||
"APZFolderParser"
|
||||
@ -869,7 +857,6 @@
|
||||
],
|
||||
"https://github.com/AlexYez/comfyui-timesaver": [
|
||||
[
|
||||
"ModelScanner",
|
||||
"TS Cube to Equirectangular",
|
||||
"TS Equirectangular to Cube",
|
||||
"TS Files Downloader",
|
||||
@ -882,6 +869,7 @@
|
||||
"TS_Color_Grade",
|
||||
"TS_DeflickerNode",
|
||||
"TS_FilePathLoader",
|
||||
"TS_FilmEmulation",
|
||||
"TS_FilmGrain",
|
||||
"TS_Film_Emulation",
|
||||
"TS_Free_Video_Memory",
|
||||
@ -977,14 +965,6 @@
|
||||
"title_aux": "ComfyUI_deepDeband [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/AprEcho/ComfyUI-RandomSeed": [
|
||||
[
|
||||
"RandomSeed"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-RandomSeed"
|
||||
}
|
||||
],
|
||||
"https://github.com/ArmandAlbert/Kwai_font_comfyui": [
|
||||
[
|
||||
"Kwaifont_Image_Cropper",
|
||||
@ -1804,22 +1784,6 @@
|
||||
"title_aux": "ComfyUI-Math [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/Enferlain/ComfyUI-Model-Comparison": [
|
||||
[
|
||||
"ModelComparisoner"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Model-Comparison [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/Enferlain/ComfyUI-SamplerCustom-3Decimals": [
|
||||
[
|
||||
"SamplerCustom3Decimals"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-SamplerCustom-3Decimals"
|
||||
}
|
||||
],
|
||||
"https://github.com/Enferlain/ComfyUI-extra-schedulers": [
|
||||
[
|
||||
"BetaSchedulerV2C",
|
||||
@ -1868,15 +1832,6 @@
|
||||
"title_aux": "Comfy-Metadata-System [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/EricRorich/ComfyUI-MegaTran-cutom-node": [
|
||||
[
|
||||
"Mega tran",
|
||||
"Megatran"
|
||||
],
|
||||
{
|
||||
"title_aux": "[WIP] ComfyUI-MegaTran-cutom-node"
|
||||
}
|
||||
],
|
||||
"https://github.com/Estanislao-Oviedo/ComfyUI-CustomNodes": [
|
||||
[
|
||||
"Attention couple",
|
||||
@ -2189,11 +2144,8 @@
|
||||
],
|
||||
"https://github.com/IgPoly/ComfyUI-igTools": [
|
||||
[
|
||||
"IGT_AspectRatioResizer",
|
||||
"IGT_FloatMinMax",
|
||||
"IGT_ImageResizer",
|
||||
"IGT_ImageTilesCalc",
|
||||
"IGT_IntMinMax",
|
||||
"IGT_SimpleTilesCalc"
|
||||
],
|
||||
{
|
||||
@ -2245,14 +2197,6 @@
|
||||
"title_aux": "comfyui-codeformer [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/JBKing514/map_comfyui": [
|
||||
[
|
||||
"MAP_Pro_Suite"
|
||||
],
|
||||
{
|
||||
"title_aux": "[WIP] map_comfyui"
|
||||
}
|
||||
],
|
||||
"https://github.com/JHBOY-ha/ComfyUI-jh-essential": [
|
||||
[
|
||||
"EndTimer",
|
||||
@ -2305,15 +2249,6 @@
|
||||
"title_aux": "ComfyUI-yolov5-face [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/JiangAogo/ComfyUI-Gemini-API": [
|
||||
[
|
||||
"GeminiImageGenerator",
|
||||
"GeminiLLM"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Gemini-API [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/Jiffies-64/ComfyUI-SaveImagePlus": [
|
||||
[
|
||||
"SaveImagePlus"
|
||||
@ -2372,18 +2307,15 @@
|
||||
"https://github.com/JosDigby/ComfyUI-DigbyWan": [
|
||||
[
|
||||
"DigbyLoopClose",
|
||||
"DigbyLoopCloseState",
|
||||
"DigbyLoopOpen",
|
||||
"DigbyLoopRetrieveImages",
|
||||
"DigbyLoopStoreImages",
|
||||
"DigbyLoopVariables",
|
||||
"DigbyLoopVariablesInit",
|
||||
"DigbyWan22MiddleFrameToVideo",
|
||||
"DigbyWan22SmoothVideoTransition",
|
||||
"DigbyWanMoeKSampler",
|
||||
"DigbyWanMoeKSamplerBasic",
|
||||
"DigbyWanVACEVideoBridge",
|
||||
"DigbyWanVACEVideoExtend",
|
||||
"DigbyWanVACEVideoSmooth"
|
||||
"DigbyLoopOpenState",
|
||||
"DigbyLoopStatePack",
|
||||
"DigbyLoopStateUnpack",
|
||||
"ImageBatchLoopExtract",
|
||||
"WanMiddleFrameToVideo",
|
||||
"WanSmoothVideoTransition",
|
||||
"WanVACEVideoSmoother"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-DigbyWan"
|
||||
@ -2639,14 +2571,6 @@
|
||||
"title_aux": "comfyui_LK_selfuse"
|
||||
}
|
||||
],
|
||||
"https://github.com/LMietkiewicz/HiggsfieldAPI_Node": [
|
||||
[
|
||||
"HiggsfieldAPI"
|
||||
],
|
||||
{
|
||||
"title_aux": "HiggsfieldAPI_Node"
|
||||
}
|
||||
],
|
||||
"https://github.com/LSDJesus/ComfyUI-Luna-Collection": [
|
||||
[
|
||||
"LunaBatchPromptExtractor",
|
||||
@ -2667,8 +2591,6 @@
|
||||
"LunaExpressionPromptBuilder",
|
||||
"LunaExpressionSlicerSaver",
|
||||
"LunaGGUFConverter",
|
||||
"LunaKSampler",
|
||||
"LunaKSamplerAdvanced",
|
||||
"LunaLoRARandomizer",
|
||||
"LunaLoRAStacker",
|
||||
"LunaLoRATriggerInjector",
|
||||
@ -2677,10 +2599,8 @@
|
||||
"LunaModelRouter",
|
||||
"LunaMultiSaver",
|
||||
"LunaOptimizedWeightsManager",
|
||||
"LunaPipeExpander",
|
||||
"LunaPromptCraft",
|
||||
"LunaPromptCraftDebug",
|
||||
"LunaResetModelWeights",
|
||||
"LunaSecondaryModelLoader",
|
||||
"LunaSmartLoRALinker",
|
||||
"LunaSuperUpscaler",
|
||||
@ -2697,6 +2617,7 @@
|
||||
"LunaZImageEncoder",
|
||||
"LunaZImageProcessor",
|
||||
"Luna_Advanced_Upscaler",
|
||||
"Luna_Detailer",
|
||||
"Luna_SimpleUpscaler",
|
||||
"Luna_UltimateSDUpscale"
|
||||
],
|
||||
@ -3199,7 +3120,6 @@
|
||||
"DJZColorWheel",
|
||||
"DJZDatamosh",
|
||||
"DJZDatamoshV2",
|
||||
"DJZImageScaleToMegabytes",
|
||||
"DJZImageScaleToTotalPixels",
|
||||
"DJZ_ParallaxV1",
|
||||
"DatasetWordcloud",
|
||||
@ -3350,6 +3270,7 @@
|
||||
"DeepSeek_Node",
|
||||
"Delay_node",
|
||||
"Delete_folder_Node",
|
||||
"DongShowTextNode",
|
||||
"Dong_Pixelate_Node",
|
||||
"Dong_Text_Node",
|
||||
"DownloadNode",
|
||||
@ -3358,14 +3279,12 @@
|
||||
"FolderIteratorNODE",
|
||||
"GLM_Node",
|
||||
"GetImageListFromFloderNode",
|
||||
"GetImageListFromFloderNode2",
|
||||
"GetRefModelImageListNode",
|
||||
"Get_cookies_Node",
|
||||
"Get_json_value_Node",
|
||||
"Get_video_Node",
|
||||
"HashCalculationsNode",
|
||||
"HuggingFaceUploadNode",
|
||||
"IFEXISTTEXTNODE",
|
||||
"IMG2URLNode",
|
||||
"INTNODE",
|
||||
"Image2GIFNode",
|
||||
@ -3374,10 +3293,8 @@
|
||||
"LibLib_upload_Node",
|
||||
"LogicToolsNode",
|
||||
"LoraIterator",
|
||||
"Notice_Node",
|
||||
"PromptConcatNode",
|
||||
"Qwen3VL_235_Node",
|
||||
"Qwen3VL_30_Node",
|
||||
"QwenVL_Node",
|
||||
"RandomNumbersNode",
|
||||
"RenameNode",
|
||||
"ResolutionNode",
|
||||
@ -3389,11 +3306,11 @@
|
||||
"Wan21_post_Node",
|
||||
"ZIPwith7zNode",
|
||||
"bailian_model_select_Node",
|
||||
"checkvram_node",
|
||||
"cogvideox_flash_get_Node",
|
||||
"cogvideox_flash_post_Node",
|
||||
"cogview_3_flash_Node",
|
||||
"doubaoNode",
|
||||
"douyin_remove_watermark_Node",
|
||||
"file_analysis_Node",
|
||||
"file_extract_Node",
|
||||
"find_files_by_extension_Node",
|
||||
@ -3402,16 +3319,11 @@
|
||||
"image_iterator",
|
||||
"img2url_v2_Node",
|
||||
"img_understanding_Node",
|
||||
"kie_base64_upload_node",
|
||||
"kie_nano_get_node",
|
||||
"kie_nano_post_node",
|
||||
"klingai_video_Node",
|
||||
"path_join_Node",
|
||||
"save_img_NODE",
|
||||
"save_img_v2_NODE",
|
||||
"set_api_Node",
|
||||
"suchuang_get_node",
|
||||
"suchuang_nano_post_node",
|
||||
"text_replace_node"
|
||||
],
|
||||
{
|
||||
@ -3559,14 +3471,6 @@
|
||||
"title_aux": "ComfyUI-LaplaMask"
|
||||
}
|
||||
],
|
||||
"https://github.com/OhSeongHyeon/comfyui-random-image-size": [
|
||||
[
|
||||
"RandomImageSize"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-random-image-size"
|
||||
}
|
||||
],
|
||||
"https://github.com/Omario92/ComfyUI-OmarioNodes": [
|
||||
[
|
||||
"DualEndpointColorBlendScheduler"
|
||||
@ -3692,27 +3596,21 @@
|
||||
"CADAnalysisViewer",
|
||||
"CADBoundingBox",
|
||||
"CADCheckOverlappingFaces",
|
||||
"CADCurvature",
|
||||
"CADCurvePlotter",
|
||||
"CADEdgeAnalysis",
|
||||
"CADEdgeDetailAnalyzer",
|
||||
"CADEdgeViewer",
|
||||
"CADEdgeViewerVTK",
|
||||
"CADExtractFaces",
|
||||
"CADFaceAnalysis",
|
||||
"CADFixDegenerateFaces",
|
||||
"CADGetFilename",
|
||||
"CADHealShape",
|
||||
"CADHierarchyTree",
|
||||
"CADMergeVertices",
|
||||
"CADPrimitiveReconstruction",
|
||||
"CADProjectFacesXY",
|
||||
"CADROISelector",
|
||||
"CADRaytracerBVH",
|
||||
"CADRecodeInference",
|
||||
"CADSave",
|
||||
"CADSewFaces",
|
||||
"CADSplineViewer",
|
||||
"CADSplitComponents",
|
||||
"CADTransform",
|
||||
"CAD_Convert_Format",
|
||||
@ -3751,7 +3649,6 @@
|
||||
"Point2CADSegmentation",
|
||||
"Point2CADSurfaceFitting",
|
||||
"Point2CADSurfaceFittingOCC",
|
||||
"Point2CADToWireframeInfo",
|
||||
"Point2CADTopologyExtraction",
|
||||
"PointCloudSegmentation",
|
||||
"PreviewCADBatch",
|
||||
@ -4083,17 +3980,6 @@
|
||||
"title_aux": "Retro Engine Node for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/SSYCloud/comfyui-ssy-syncapi": [
|
||||
[
|
||||
"SSYBytedanceProcessor",
|
||||
"SSYDoubaoGenerator",
|
||||
"SSYGoogleGenerator",
|
||||
"SSYOpenAIGenerator"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-ssy-syncapi [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/SXQBW/ComfyUI-Qwen3": [
|
||||
[
|
||||
"QwenVisionParser"
|
||||
@ -4507,17 +4393,6 @@
|
||||
"title_aux": "ComfyUI_Remaker_FaceSwap"
|
||||
}
|
||||
],
|
||||
"https://github.com/Spicely/ComfyUI-Luma": [
|
||||
[
|
||||
"AddVideoTextWatermark",
|
||||
"GetDeviceType",
|
||||
"SeparateVideoAudio",
|
||||
"Wav2Srt"
|
||||
],
|
||||
{
|
||||
"title_aux": "[WIP] ComfyUI-Luma"
|
||||
}
|
||||
],
|
||||
"https://github.com/Stable-X/ComfyUI-Hi3DGen": [
|
||||
[
|
||||
"DifferenceExtractorNode",
|
||||
@ -4750,14 +4625,6 @@
|
||||
"title_aux": "comfyui_flowrider_nodes [UNSAFE]"
|
||||
}
|
||||
],
|
||||
"https://github.com/Suzu008/ComfyUI-ImageCritic": [
|
||||
[
|
||||
"DetailEncoder"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-ImageCritic"
|
||||
}
|
||||
],
|
||||
"https://github.com/Symbiomatrix/Comfyui-Sort-Files": [
|
||||
[
|
||||
"ImageSaverSBM",
|
||||
@ -5846,6 +5713,14 @@
|
||||
"title_aux": "ComfyUI_MoreComfy"
|
||||
}
|
||||
],
|
||||
"https://github.com/ashtar1984/comfyui-switch-bypass-mute-by-group": [
|
||||
[
|
||||
"SwitchBypassMute"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-switch-bypass-mute-by-group"
|
||||
}
|
||||
],
|
||||
"https://github.com/avocadori/ComfyUI-AudioAmplitudeConverter": [
|
||||
[
|
||||
"NormalizeAmpToFloatNode"
|
||||
@ -5929,15 +5804,6 @@
|
||||
"title_aux": "BigModelPipe [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/baoanhng/ComfyUI-utils": [
|
||||
[
|
||||
"TextJoiner",
|
||||
"TextSplitter"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-utils"
|
||||
}
|
||||
],
|
||||
"https://github.com/barakapa/barakapa-nodes": [
|
||||
[
|
||||
"brkp_ConcatenateString",
|
||||
@ -6505,7 +6371,6 @@
|
||||
"https://github.com/chetusangolgi/Comfyui-supabase": [
|
||||
[
|
||||
"SupabaseAudioUploader",
|
||||
"SupabaseGLBUploader",
|
||||
"SupabaseImageUploader",
|
||||
"SupabaseTableWatcherNode"
|
||||
],
|
||||
@ -6887,6 +6752,13 @@
|
||||
"PerturbedAttentionGuidance",
|
||||
"PhotoMakerEncode",
|
||||
"PhotoMakerLoader",
|
||||
"PikaImageToVideoNode2_2",
|
||||
"PikaScenesV2_2",
|
||||
"PikaStartEndFrameNode2_2",
|
||||
"PikaTextToVideoNode2_2",
|
||||
"Pikadditions",
|
||||
"Pikaffects",
|
||||
"Pikaswaps",
|
||||
"PixverseImageToVideoNode",
|
||||
"PixverseTemplateNode",
|
||||
"PixverseTextToVideoNode",
|
||||
@ -6930,7 +6802,6 @@
|
||||
"ReplaceVideoLatentFrames",
|
||||
"RescaleCFG",
|
||||
"ResizeAndPadImage",
|
||||
"ResolutionBucket",
|
||||
"Rodin3D_Detail",
|
||||
"Rodin3D_Gen2",
|
||||
"Rodin3D_Regular",
|
||||
@ -6958,7 +6829,6 @@
|
||||
"SamplerLCMUpscale",
|
||||
"SamplerLMS",
|
||||
"SamplerSASolver",
|
||||
"SamplerSEEDS2",
|
||||
"SamplingPercentToSigma",
|
||||
"SaveAnimatedPNG",
|
||||
"SaveAnimatedWEBP",
|
||||
@ -7140,7 +7010,6 @@
|
||||
"WanTrackToVideo",
|
||||
"WanVaceToVideo",
|
||||
"WebcamCapture",
|
||||
"ZImageFunControlnet",
|
||||
"unCLIPCheckpointLoader",
|
||||
"unCLIPConditioning",
|
||||
"wanBlockSwap"
|
||||
@ -7403,15 +7272,6 @@
|
||||
"title_aux": "ComfyUI_WcpD_Utility_Kit"
|
||||
}
|
||||
],
|
||||
"https://github.com/dougbtv/comfyui-vllm-omni": [
|
||||
[
|
||||
"VLLMImageEdit",
|
||||
"VLLMTextToImage"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-vllm-omni"
|
||||
}
|
||||
],
|
||||
"https://github.com/dowands/ComfyUI-AddMaskForICLora": [
|
||||
[
|
||||
"AddMaskForICLora"
|
||||
@ -7597,19 +7457,6 @@
|
||||
"title_aux": "ComfyUI-Sysinfo"
|
||||
}
|
||||
],
|
||||
"https://github.com/edvardtoth/ComfyUI-ETNodes": [
|
||||
[
|
||||
"ETNodes-Color-Selector",
|
||||
"ETNodes-Gemini-API-Image",
|
||||
"ETNodes-Gemini-API-Text",
|
||||
"ETNodes-List-Items",
|
||||
"ETNodes-List-Selector",
|
||||
"ETNodes-Text-Preview"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-ETNodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/eggsbenedicto/DiffusionRenderer-ComfyUI": [
|
||||
[
|
||||
"Cosmos1ForwardRenderer",
|
||||
@ -7922,6 +7769,29 @@
|
||||
"title_aux": "ComfyUI-LLM-Utils [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/frost-byte/fbTools": [
|
||||
[
|
||||
"FBTextEncodeQwenImageEditPlus",
|
||||
"NodeInputSelect",
|
||||
"OpaqueAlpha",
|
||||
"QwenAspectRatio",
|
||||
"SAMPreprocessNHWC",
|
||||
"SceneCreate",
|
||||
"SceneInput",
|
||||
"SceneOutput",
|
||||
"SceneSave",
|
||||
"SceneSelect",
|
||||
"SceneUpdate",
|
||||
"SceneView",
|
||||
"SceneWanVideoLoraMultiSave",
|
||||
"SubdirLister",
|
||||
"TailEnhancePro",
|
||||
"TailSplit"
|
||||
],
|
||||
{
|
||||
"title_aux": "fb-tools"
|
||||
}
|
||||
],
|
||||
"https://github.com/ftechmax/ComfyUI-NovaKit-Pack": [
|
||||
[
|
||||
"CountTokens"
|
||||
@ -8006,16 +7876,6 @@
|
||||
"title_aux": "ComfyUI_gaga_utils"
|
||||
}
|
||||
],
|
||||
"https://github.com/gajjar4/ComfyUI-Qwen-Image-i2L": [
|
||||
[
|
||||
"QwenI2L_Apply",
|
||||
"QwenI2L_PipelineLoader",
|
||||
"QwenI2L_Save"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Qwen-Image-i2L [UNSAFE]"
|
||||
}
|
||||
],
|
||||
"https://github.com/galoreware/ComfyUI-GaloreNodes": [
|
||||
[
|
||||
"GNI_HEX_TO_COLOR",
|
||||
@ -8249,12 +8109,9 @@
|
||||
"https://github.com/grokuku/ComfyUI-Holaf": [
|
||||
[
|
||||
"HolafBypasser",
|
||||
"HolafGroupBypasser",
|
||||
"HolafImageBatchSlice",
|
||||
"HolafImageComparer",
|
||||
"HolafInstagramResize",
|
||||
"HolafKSampler",
|
||||
"HolafLoadImageVideo",
|
||||
"HolafLutGenerator",
|
||||
"HolafLutSaver",
|
||||
"HolafMaskToBoolean",
|
||||
@ -8263,11 +8120,7 @@
|
||||
"HolafRemote",
|
||||
"HolafResolutionPreset",
|
||||
"HolafSaveImage",
|
||||
"HolafSaveVideo",
|
||||
"HolafShortcut",
|
||||
"HolafShortcutUser",
|
||||
"HolafTiledKSampler",
|
||||
"HolafVideoPreview",
|
||||
"UpscaleImageHolaf"
|
||||
],
|
||||
{
|
||||
@ -8983,17 +8836,6 @@
|
||||
"title_aux": "ComfyUI-AliCloud-Bailian [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/jinchanz/ComfyUI-Midjourney": [
|
||||
[
|
||||
"MidjourneyAPI",
|
||||
"MidjourneyAPIPoll",
|
||||
"MidjourneyAPISubmit",
|
||||
"MidjourneyJSONExtractor"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Midjourney"
|
||||
}
|
||||
],
|
||||
"https://github.com/jn-jairo/jn_node_suite_comfyui": [
|
||||
[
|
||||
"JN_AreaInfo",
|
||||
@ -9749,14 +9591,15 @@
|
||||
"title_aux": "ComfyUI_Scoring-Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/lfelipegg/lfgg_custom_nodes_comfyui": [
|
||||
"https://github.com/lfelipegg/lfgg_custom_nodes": [
|
||||
[
|
||||
"LfggImageResolutionByRatio",
|
||||
"LfggLatentSizeByRatio",
|
||||
"LfggPixelBudgetLatentSize"
|
||||
"LFGG - Resolution Tools",
|
||||
"LFGG KSampler (advanced) - Config",
|
||||
"LFGG KSampler - Config",
|
||||
"ModelMergeCombos"
|
||||
],
|
||||
{
|
||||
"title_aux": "[WIP] lfgg_custom_nodes_comfyui"
|
||||
"title_aux": "lfgg_custom_nodes [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/lggcfx2020/ComfyUI-LGGCFX-Tools": [
|
||||
@ -9797,6 +9640,7 @@
|
||||
"MaskToSAMCoordsV2",
|
||||
"MorseCode",
|
||||
"PoseReformer",
|
||||
"SaveITAsZip",
|
||||
"SaveImageAsZip",
|
||||
"SaveTextAsZip",
|
||||
"StrFormat",
|
||||
@ -9872,28 +9716,6 @@
|
||||
"title_aux": "ComfyUI-Alternatives"
|
||||
}
|
||||
],
|
||||
"https://github.com/logicalor/comfyui_mv_adapter": [
|
||||
[
|
||||
"MVAdapterBackgroundRemoval",
|
||||
"MVAdapterCameraEmbed",
|
||||
"MVAdapterClearVRAM",
|
||||
"MVAdapterI2MVSampler",
|
||||
"MVAdapterImageGrid",
|
||||
"MVAdapterImagePreprocess",
|
||||
"MVAdapterLoRALoader",
|
||||
"MVAdapterModelSetup",
|
||||
"MVAdapterPipelineLoader",
|
||||
"MVAdapterReferencePreprocess",
|
||||
"MVAdapterSchedulerConfig",
|
||||
"MVAdapterSplitViews",
|
||||
"MVAdapterT2MVSampler",
|
||||
"MVAdapterVAEDecode",
|
||||
"MVAdapterViewSelector"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui_mv_adapter [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/logtd/ComfyUI-HunyuanLoom": [
|
||||
[
|
||||
"ConfigureModifiedHY",
|
||||
@ -9987,28 +9809,15 @@
|
||||
[
|
||||
"DiffusersImageEditGenerator",
|
||||
"DiffusersImageGenerator",
|
||||
"DiffusersLoadLoraOnly",
|
||||
"DiffusersLoraLayersOperation",
|
||||
"DiffusersLoraLoader",
|
||||
"DiffusersLoraStatViewer",
|
||||
"DiffusersLoraUnloader",
|
||||
"DiffusersMergeLoraToPipeline",
|
||||
"DiffusersModelLoader",
|
||||
"DiffusersPipeline",
|
||||
"DiffusersPipelineBuilder",
|
||||
"DiffusersPreprocessorLoader",
|
||||
"DiffusersSampling",
|
||||
"DiffusersSaveLora",
|
||||
"DiffusersTextEncode",
|
||||
"DiffusersTextEncoderLoader",
|
||||
"DiffusersTokenizerLoader",
|
||||
"DiffusersTransformerLoader",
|
||||
"DiffusersVAELoader",
|
||||
"LoadLoraOnly",
|
||||
"LoraLayersOperation",
|
||||
"LoraStatViewer",
|
||||
"MergeLoraToTransformer",
|
||||
"SaveLora",
|
||||
"TextEncodeDiffusersLongCat",
|
||||
"TextEncodeDiffusersLongCatCached",
|
||||
"TextEncodeDiffusersLongCatImageEdit"
|
||||
@ -10693,6 +10502,15 @@
|
||||
"title_aux": "ComfyUI-WanPlus"
|
||||
}
|
||||
],
|
||||
"https://github.com/neverbiasu/ComfyUI-ControlNeXt": [
|
||||
[
|
||||
"ControlNextPipelineConfig",
|
||||
"ControlNextSDXL"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-ControlNeXt [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/neverbiasu/ComfyUI-DeepSeek": [
|
||||
[
|
||||
"DeepSeekCaller"
|
||||
@ -10795,9 +10613,7 @@
|
||||
"ExtractPromptFromImage",
|
||||
"FloatToString",
|
||||
"FloatToStringWithPrefix",
|
||||
"IsComfyQueueEmpty",
|
||||
"LoraWildcardGenerator",
|
||||
"RepeatTextLines"
|
||||
"LoraWildcardGenerator"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-samenodes"
|
||||
@ -11113,6 +10929,15 @@
|
||||
"title_aux": "ComfyUI-PixuAI"
|
||||
}
|
||||
],
|
||||
"https://github.com/pizurny/ComfyUI-Just-DWPose": [
|
||||
[
|
||||
"DWPoseAnnotator",
|
||||
"DWPoseJSONToImage"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Just-DWPose [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/pizurny/Comfyui-FeedbackSampler": [
|
||||
[
|
||||
"FeedbackSampler"
|
||||
@ -11317,15 +11142,6 @@
|
||||
"title_aux": "comfyui_api_executor_nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/rafstahelin/ComfyUI_KieNanoBananaPro": [
|
||||
[
|
||||
"KieNanoBananaPro",
|
||||
"KieNanoBananaProBatch"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_KieNanoBananaPro"
|
||||
}
|
||||
],
|
||||
"https://github.com/rakete/comfyui-rakete": [
|
||||
[
|
||||
"rakete.BuildString",
|
||||
@ -11671,57 +11487,6 @@
|
||||
"title_aux": "ComfyUI Sahib Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/saltchicken/ComfyUI-Identity-Mixer": [
|
||||
[
|
||||
"IdentityLoraMixer",
|
||||
"IdentityLoraMixerStack"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Identity-Mixer"
|
||||
}
|
||||
],
|
||||
"https://github.com/saltchicken/ComfyUI-Local-Loader": [
|
||||
[
|
||||
"LoadImageFromDir",
|
||||
"LoadImageFromPath"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Local-Loader"
|
||||
}
|
||||
],
|
||||
"https://github.com/saltchicken/ComfyUI-Prompter": [
|
||||
[
|
||||
"CustomizablePromptGenerator"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Prompter"
|
||||
}
|
||||
],
|
||||
"https://github.com/saltchicken/ComfyUI-Selector": [
|
||||
[
|
||||
"SimpleSelectorNode"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Selector"
|
||||
}
|
||||
],
|
||||
"https://github.com/saltchicken/ComfyUI-Video-Utils": [
|
||||
[
|
||||
"FinalFrameSelector",
|
||||
"VideoMerge"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Video-Utils"
|
||||
}
|
||||
],
|
||||
"https://github.com/satyasairazole/ComfyUI-Turbandetection": [
|
||||
[
|
||||
"TurbanDetectorNode"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Turbandetection [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/saulchiu/comfy_saul_plugin": [
|
||||
[
|
||||
"Blend Images",
|
||||
@ -11820,6 +11585,18 @@
|
||||
"title_aux": "comfyui-hydit"
|
||||
}
|
||||
],
|
||||
"https://github.com/shinich39/comfyui-nothing-happened": [
|
||||
[
|
||||
"NothingHappened"
|
||||
],
|
||||
{
|
||||
"author": "shinich39",
|
||||
"description": "Save image and keep metadata.",
|
||||
"nickname": "comfyui-nothing-happened",
|
||||
"title": "comfyui-nothing-happened",
|
||||
"title_aux": "comfyui-nothing-happened"
|
||||
}
|
||||
],
|
||||
"https://github.com/shinich39/comfyui-run-js": [
|
||||
[
|
||||
"RunJS"
|
||||
@ -11944,13 +11721,10 @@
|
||||
],
|
||||
"https://github.com/silveroxides/ComfyUI_SamplingUtils": [
|
||||
[
|
||||
"Frakturpad",
|
||||
"GetJsonKeyValue",
|
||||
"ImageBlendByMask",
|
||||
"Image_Color_Noise",
|
||||
"ModifyMask",
|
||||
"SamplingParameters",
|
||||
"SystemMessagePresets",
|
||||
"TextEncodeFlux2SystemPrompt",
|
||||
"TextEncodeZITSystemPrompt"
|
||||
],
|
||||
@ -12148,39 +11922,6 @@
|
||||
"title_aux": "comfyui-lingshang"
|
||||
}
|
||||
],
|
||||
"https://github.com/stalkervr/ComfyUI-StalkerVr": [
|
||||
[
|
||||
"AnyCollector",
|
||||
"ImageAspectRatioFixer",
|
||||
"ImageBatchCrop",
|
||||
"ImageGridCropper",
|
||||
"JsonArraySplitter",
|
||||
"JsonBuilder",
|
||||
"JsonDeserializeObject",
|
||||
"JsonFieldRemover",
|
||||
"JsonFieldReplaceAdvanced",
|
||||
"JsonFieldValueExtractor",
|
||||
"JsonPairInput",
|
||||
"JsonPathLoader",
|
||||
"JsonPromptToTextPromptConverter",
|
||||
"JsonRootListExtractor",
|
||||
"JsonSerializeObject",
|
||||
"JsonToString",
|
||||
"ListItemExtractor",
|
||||
"LogValue",
|
||||
"LoopAny",
|
||||
"PromptPartJoin",
|
||||
"StringBuilder",
|
||||
"StringCollector",
|
||||
"StringConcatenation",
|
||||
"StringListToString",
|
||||
"StringWrapper",
|
||||
"WanVideoMultiPrompt"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-StalkerVr"
|
||||
}
|
||||
],
|
||||
"https://github.com/stalkervr/comfyui-custom-path-nodes": [
|
||||
[
|
||||
"AnyCollector",
|
||||
@ -12223,16 +11964,6 @@
|
||||
"title_aux": "ComfyUI-Audio-Subtitle [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/starsFriday/ComfyUI-LongCat-Image": [
|
||||
[
|
||||
"LongCatImageEdit",
|
||||
"LongCatImageModelLoader",
|
||||
"LongCatImageTextToImage"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-LongCat-Image [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/starsFriday/ComfyUI-Tracker-Person": [
|
||||
[
|
||||
"YoloTrackNode"
|
||||
@ -12770,23 +12501,6 @@
|
||||
"title_aux": "ComfyUI-SaveImg-W-MetaData"
|
||||
}
|
||||
],
|
||||
"https://github.com/u5dev/ComfyUI_u5_EasyScripter": [
|
||||
[
|
||||
"comfyUI_u5_easyscripter",
|
||||
"u5_CLIPLoader",
|
||||
"u5_CLIPVisionLoader",
|
||||
"u5_CheckpointLoader",
|
||||
"u5_ControlNetLoader",
|
||||
"u5_GLIGENLoader",
|
||||
"u5_LoraLoader",
|
||||
"u5_StyleModelLoader",
|
||||
"u5_UNETLoader",
|
||||
"u5_VAELoader"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_u5_EasyScripter [UNSAFE]"
|
||||
}
|
||||
],
|
||||
"https://github.com/umisetokikaze/comfyui_mergekit": [
|
||||
[
|
||||
"DefineSaveName",
|
||||
@ -13305,16 +13019,6 @@
|
||||
"title_aux": "ComfyUI-DreamOmni2-GGUF [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/xuchenxu168/comfyui_meituan_image": [
|
||||
[
|
||||
"MeituanLongCatEdit",
|
||||
"MeituanLongCatLoader",
|
||||
"MeituanLongCatT2I"
|
||||
],
|
||||
{
|
||||
"title_aux": "[WIP] comfyui_meituan_image"
|
||||
}
|
||||
],
|
||||
"https://github.com/xzuyn/ComfyUI-xzuynodes": [
|
||||
[
|
||||
"CLIPLoaderXZ",
|
||||
@ -13703,7 +13407,6 @@
|
||||
"https://github.com/zyd232/ComfyUI-zyd232-Nodes": [
|
||||
[
|
||||
"zyd232 ImagesPixelsCompare",
|
||||
"zyd232 MaskBatchBlend",
|
||||
"zyd232_SavePreviewImages"
|
||||
],
|
||||
{
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,106 +1,5 @@
|
||||
{
|
||||
"custom_nodes": [
|
||||
{
|
||||
"author": "jkhayiying",
|
||||
"title": "ImageLoadFromLocalOrUrl Node for ComfyUI [REMOVED]",
|
||||
"id": "JkhaImageLoaderPathOrUrl",
|
||||
"reference": "https://gitee.com/yyh915/jkha-load-img",
|
||||
"files": [
|
||||
"https://gitee.com/yyh915/jkha-load-img"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This is a node to load an image from local path or url."
|
||||
},
|
||||
{
|
||||
"author": "pizurny",
|
||||
"title": "ComfyUI-Just-DWPose [REMOVED]",
|
||||
"reference": "https://github.com/pizurny/ComfyUI-Just-DWPose",
|
||||
"files": [
|
||||
"https://github.com/pizurny/ComfyUI-Just-DWPose"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "An advanced DWPose annotator for ComfyUI with TorchScript and ONNX backends, featuring comprehensive pose detection, bone validation, temporal smoothing, and custom visualization tools."
|
||||
},
|
||||
{
|
||||
"author": "lfelipegg",
|
||||
"title": "lfgg_custom_nodes [REMOVED]",
|
||||
"reference": "https://github.com/lfelipegg/lfgg_custom_nodes",
|
||||
"files": [
|
||||
"https://github.com/lfelipegg/lfgg_custom_nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: ModelMergeCombos\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "AndSni",
|
||||
"title": "Comfy-FL-Nodes [REMOVED]",
|
||||
"reference": "https://github.com/AndSni/Comfy-FL-Nodes",
|
||||
"files": [
|
||||
"https://github.com/AndSni/Comfy-FL-Nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Generates human characters for commerce applications in ComfyUI. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "neeltheninja",
|
||||
"title": "ComfyUI-ControlNeXt [REMOVED]",
|
||||
"reference": "https://github.com/neverbiasu/ComfyUI-ControlNeXt",
|
||||
"files": [
|
||||
"https://github.com/neverbiasu/ComfyUI-ControlNeXt"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "In progress🚧"
|
||||
},
|
||||
{
|
||||
"author": "TheArtOfficial",
|
||||
"title": "ComfyUI-Nitra [REMOVED]",
|
||||
"reference": "https://github.com/TheArtOfficial/ComfyUI-Nitra",
|
||||
"files": [
|
||||
"https://github.com/TheArtOfficial/ComfyUI-Nitra"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nitra custom node for ComfyUI"
|
||||
},
|
||||
{
|
||||
"author": "AngelCookies",
|
||||
"title": "ComfyUI-Seed-Tracker [REMOVED]",
|
||||
"reference": "https://github.com/AngelCookies/ComfyUI-Seed-Tracker",
|
||||
"files": [
|
||||
"https://github.com/AngelCookies/ComfyUI-Seed-Tracker"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI extension that tracks random seeds throughout your image generation workflows"
|
||||
},
|
||||
{
|
||||
"author": "shinich39",
|
||||
"title": "comfyui-nothing-happened [REMOVED]",
|
||||
"reference": "httphttps://github.com/shinich39/comfyui-nothing-happened",
|
||||
"files": [
|
||||
"https://github.com/shinich39/comfyui-nothing-happened"
|
||||
],
|
||||
"description": "Save image and keep metadata.",
|
||||
"install_type": "git-clone"
|
||||
},
|
||||
{
|
||||
"author": "ashtar1984",
|
||||
"title": "comfyui-switch-bypass-mute-by-group [REMOVED]",
|
||||
"reference": "https://github.com/ashtar1984/comfyui-switch-bypass-mute-by-group",
|
||||
"files": [
|
||||
"https://github.com/ashtar1984/comfyui-switch-bypass-mute-by-group"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node for group-based node switching, bypassing, and muting control. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "wallen0322",
|
||||
"title": "ComfyUI-TTM-WAN22 [REMOVED]",
|
||||
"reference": "https://github.com/wallen0322/ComfyUI-TTM-WAN22",
|
||||
"files": [
|
||||
"https://github.com/wallen0322/ComfyUI-TTM-WAN22"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "TTM (Time-to-Move) node for ComfyUI enabling motion-controlled video generation with Wan2.2 models using dual-clock denoising for independent background and object animation control."
|
||||
},
|
||||
{
|
||||
"author": "cdanielp",
|
||||
"title": "COMFYUI_PROMPTMODELS [REMOVED]",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -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"
|
||||
version = "3.38.3"
|
||||
license = { file = "LICENSE.txt" }
|
||||
dependencies = ["GitPython", "PyGithub", "matrix-nio", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions", "toml", "uv", "chardet"]
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user