mirror of
https://github.com/Comfy-Org/ComfyUI-Manager.git
synced 2026-01-22 12:00:14 +08:00
Compare commits
42 Commits
801d5e6cbb
...
60e657be3a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
60e657be3a | ||
|
|
183af0dfa5 | ||
|
|
45ac5429f8 | ||
|
|
c771977a95 | ||
|
|
668d7bbb2c | ||
|
|
926cfabb58 | ||
|
|
a9a8d05115 | ||
|
|
e368f4366a | ||
|
|
dc5bddbc17 | ||
|
|
358a480408 | ||
|
|
c96fdb3c7a | ||
|
|
c090abcc02 | ||
|
|
1ff02be35f | ||
|
|
10fbfb88f7 | ||
|
|
9753df72ed | ||
|
|
095cc3f792 | ||
|
|
656171037b | ||
|
|
7ac10f9442 | ||
|
|
3925ba27b4 | ||
|
|
44ba79aa31 | ||
|
|
14d0e31268 | ||
|
|
033acffad1 | ||
|
|
d29ff808a5 | ||
|
|
dc9b6d655b | ||
|
|
d340c85013 | ||
|
|
e328353664 | ||
|
|
02785af8fd | ||
|
|
736ae5d63e | ||
|
|
e1eeb617d2 | ||
|
|
23b6c7f0de | ||
|
|
997f97e1fc | ||
|
|
ff335ff1a0 | ||
|
|
cb3036ef81 | ||
|
|
f762906188 | ||
|
|
dde7920f8c | ||
|
|
1a0d24110a | ||
|
|
e79f6c4471 | ||
|
|
a8a7024a84 | ||
|
|
d93d002da0 | ||
|
|
baaa0479e8 | ||
|
|
cc3bd7a056 | ||
|
|
4ecefb3b71 |
@ -430,6 +430,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Apply AFFINE noise transforms to latent space to improve image quality, especially with light loras."
|
||||
},
|
||||
{
|
||||
"author": "was",
|
||||
"title": "WAS LMStudio Easy-Query",
|
||||
"reference": "https://github.com/WASasquatch/ComfyUI_LMStudio_EasyQuery",
|
||||
"files": [
|
||||
"https://github.com/WASasquatch/ComfyUI_LMStudio_EasyQuery"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "LM Studio calls with image support and easy task directions."
|
||||
},
|
||||
{
|
||||
"author": "omar92",
|
||||
"title": "Quality of life Suit:V2",
|
||||
@ -20001,6 +20011,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A video transition effects plugin implemented using a Chromium headless browser and Python."
|
||||
},
|
||||
{
|
||||
"author": "yichengup",
|
||||
"title": "ComfyUI-YCNodes_Toolkit",
|
||||
"reference": "https://github.com/yichengup/ComfyUI-YCNodes_Toolkit",
|
||||
"files": [
|
||||
"https://github.com/yichengup/ComfyUI-YCNodes_Toolkit"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI toolkit with custom nodes for BBox canvas visualization, image brush mask drawing, and coordinate annotation for debugging and external data bridging. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "Horizon Team",
|
||||
"title": "ComfyUI_FluxMod",
|
||||
@ -21194,16 +21214,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "This is a ComfyUI custom node implementation for image editing using the Step-1 model architecture, specifically adapted for reference-based image editing guided by text prompts."
|
||||
},
|
||||
{
|
||||
"author": "HM-RunningHub",
|
||||
"title": "ComfyUI Qwen-Image Node",
|
||||
"reference": "https://github.com/HM-RunningHub/ComfyUI_RH_Qwen-Image",
|
||||
"files": [
|
||||
"https://github.com/HM-RunningHub/ComfyUI_RH_Qwen-Image"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom node for ComfyUI that integrates Alibaba's Qwen-Image model for high-quality image generation with exceptional text rendering capabilities."
|
||||
},
|
||||
{
|
||||
"author": "sebord",
|
||||
"title": "ComfyUI-LMCQ",
|
||||
@ -21304,6 +21314,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI wrapper nodes for Ruyi, an image-to-video model by CreateAI."
|
||||
},
|
||||
{
|
||||
"author": "IamCreateAI",
|
||||
"title": "ComfyUI-Animon",
|
||||
"reference": "https://github.com/IamCreateAI/ComfyUI-Animon",
|
||||
"files": [
|
||||
"https://github.com/IamCreateAI/ComfyUI-Animon"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes for [Animon Platform](https://platform.animon.ai/), a comprehensive API service offering a variety of image and video generation models."
|
||||
},
|
||||
{
|
||||
"author": "pollockjj",
|
||||
"title": "ComfyUI-MultiGPU",
|
||||
@ -22483,6 +22503,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Fixed implementation of the export workflow image utility from [a/pythongosssss/ComfyUI-Custom-Scripts](https://github.com/pythongosssss/ComfyUI-Custom-Scripts). All nodes should display and all node links should be visible and render 1:1 to their actual states in ComfyUI."
|
||||
},
|
||||
{
|
||||
"author": "fuselayer",
|
||||
"title": "comfyui-lite-tracker",
|
||||
"reference": "https://github.com/fuselayer/comfyui-lite-tracker",
|
||||
"files": [
|
||||
"https://github.com/fuselayer/comfyui-lite-tracker"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for LiteTracker, a fast and efficient point tracking model for videos with load model, track, and grid editor nodes."
|
||||
},
|
||||
{
|
||||
"author": "jerrylongyan",
|
||||
"title": "ComfyUI-My-Mask",
|
||||
@ -24786,16 +24816,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Free trial of Tongyi Wanxiang wan2.1 model, this is a batch implementation of wan2.1 API, providing batch processing for your short video production."
|
||||
},
|
||||
{
|
||||
"author": "penposs",
|
||||
"title": "ComfyUI-Banana-Node",
|
||||
"reference": "https://github.com/penposs/ComfyUI-Banana-Node",
|
||||
"files": [
|
||||
"https://github.com/penposs/ComfyUI-Banana-Node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom node for ComfyUI that generates images using Google’s Gemini 2.5 Flash Image Preview API."
|
||||
},
|
||||
{
|
||||
"author": "cardenluo",
|
||||
"title": "ComfyUI-Apt_Preset",
|
||||
@ -28159,9 +28179,9 @@
|
||||
{
|
||||
"author": "GACLove",
|
||||
"title": "ComfyUI-Lightx2vWrapper",
|
||||
"reference": "https://github.com/GACLove/ComfyUI-Lightx2vWrapper",
|
||||
"reference": "https://github.com/ModelTC/ComfyUI-Lightx2vWrapper",
|
||||
"files": [
|
||||
"https://github.com/GACLove/ComfyUI-Lightx2vWrapper"
|
||||
"https://github.com/ModelTC/ComfyUI-Lightx2vWrapper"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI-Lightx2vWrapper is an inference wrapper for Lightx2v designed for use with ComfyUI."
|
||||
@ -29054,36 +29074,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "This is keit's utility nodes."
|
||||
},
|
||||
{
|
||||
"author": "fredconex",
|
||||
"title": "ComfyUI-SoundFlow",
|
||||
"reference": "https://github.com/fredconex/ComfyUI-SoundFlow",
|
||||
"files": [
|
||||
"https://github.com/fredconex/ComfyUI-SoundFlow"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This is a bunch of nodes for ComfyUI to help with sound work."
|
||||
},
|
||||
{
|
||||
"author": "fredconex",
|
||||
"title": "Sync Edit",
|
||||
"reference": "https://github.com/fredconex/ComfyUI-SyncEdit",
|
||||
"files": [
|
||||
"https://github.com/fredconex/ComfyUI-SyncEdit"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This node allow to intercept changes on the input string and choose between use the current one or sync with incoming new one."
|
||||
},
|
||||
{
|
||||
"author": "fredconex",
|
||||
"title": "SongBloom",
|
||||
"reference": "https://github.com/fredconex/ComfyUI-SongBloom",
|
||||
"files": [
|
||||
"https://github.com/fredconex/ComfyUI-SongBloom"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI Nodes for SongBloom"
|
||||
},
|
||||
{
|
||||
"author": "A043-studios",
|
||||
"title": "Pixel3DMM ComfyUI Nodes",
|
||||
@ -29979,6 +29969,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A simple node for detecting vrediction, outputs a boolean value, used for logical switching (for example, automatically adding rescalecfg when vrediction model is detected), recommended to be used with if else and other nodes."
|
||||
},
|
||||
{
|
||||
"author": "Windecay",
|
||||
"title": "ComfyUI_Dynamic-RAMCache",
|
||||
"reference": "https://github.com/Windecay/ComfyUI_Dynamic-RAMCache",
|
||||
"files": [
|
||||
"https://github.com/Windecay/ComfyUI_Dynamic-RAMCache"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom node for ComfyUI that dynamically manages RAM usage by intelligently controlling cache purging based on available system memory."
|
||||
},
|
||||
{
|
||||
"author": "kaaskoek232",
|
||||
"title": "ComfyUI-MemoryManagement",
|
||||
@ -30184,6 +30184,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI-FastVLM-7B Apple A custom node for Apple’s FastVLM-7B vision-language model. This node lets you pass an image + instruction and returns a generated text response."
|
||||
},
|
||||
{
|
||||
"author": "Ltamann",
|
||||
"title": "ComfyUI-TBG-SAM3",
|
||||
"reference": "https://github.com/Ltamann/ComfyUI-TBG-SAM3",
|
||||
"files": [
|
||||
"https://github.com/Ltamann/ComfyUI-TBG-SAM3"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node extension integrating Meta's Segment Anything Model 3 (SAM 3) for advanced image and video segmentation with text-prompt, point-based, and mask-driven capabilities. Provides production-ready nodes compatible with ComfyUI's Impact Pack SEGS format, depth map generation, and support for Python 3.13+ with CUDA and CPU support."
|
||||
},
|
||||
{
|
||||
"author": "DavidPiazza",
|
||||
"title": "Network Bending for ComfyUI",
|
||||
@ -30615,10 +30625,10 @@
|
||||
"id": "comfyui-exloadout",
|
||||
"reference": "https://github.com/IsItDanOrAi/ComfyUI-exLoadout",
|
||||
"files": [
|
||||
"https://github.com/IsItDanOrAi/ComfyUI-exLoadout"
|
||||
"https://github.com/IsItDanOrAi/ComfyUI-exLoadout"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Excel spreadsheet-driven ComfyUI nodes that let you load models, values, and workflows based on saved rows in Excel. Great for organizing and switching between CLIPs, VAEs, LoRAs, and more."
|
||||
"install_type": "git-clone",
|
||||
"description": "Excel spreadsheet-driven ComfyUI nodes that let you load models, values, and workflows based on saved rows in Excel. Great for organizing and switching between CLIPs, VAEs, LoRAs, and more."
|
||||
},
|
||||
{
|
||||
"author": "claptrap0",
|
||||
@ -30917,6 +30927,17 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "This custom node allows users to selectively choose what to add to the generated image's metadata."
|
||||
},
|
||||
{
|
||||
"author": "brucew4yn3rp",
|
||||
"title": "Vintage Effect",
|
||||
"id": "VintageEffect",
|
||||
"reference": "https://github.com/brucew4yn3rp/ComfyUI_VintageEffect",
|
||||
"files": [
|
||||
"https://github.com/brucew4yn3rp/ComfyUI_VintageEffect"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI node that applies vintage/retro effects through JPG compression, color grading, film grain, vignette, and more to emulate more realistic photo aesthetics."
|
||||
},
|
||||
{
|
||||
"author": "cedarconnor",
|
||||
"title": "ComfyUI LatLong - Equirectangular Image Processing Nodes",
|
||||
@ -30949,23 +30970,13 @@
|
||||
},
|
||||
{
|
||||
"author": "cedarconnor",
|
||||
"title": "ComfyUI-DiT360",
|
||||
"reference": "https://github.com/cedarconnor/ComfyUI-DiT360",
|
||||
"title": "ComfyUI-DreamCube",
|
||||
"reference": "https://github.com/cedarconnor/ComfyUI-DreamCube",
|
||||
"files": [
|
||||
"https://github.com/cedarconnor/ComfyUI-DiT360"
|
||||
"https://github.com/cedarconnor/ComfyUI-DreamCube"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Generate high-fidelity 360-degree panoramic images using the DiT360 diffusion transformer model in ComfyUI."
|
||||
},
|
||||
{
|
||||
"author": "cedarconnor",
|
||||
"title": "ComfyUI-OmniX",
|
||||
"reference": "https://github.com/cedarconnor/ComfyUI-OmniX",
|
||||
"files": [
|
||||
"https://github.com/cedarconnor/ComfyUI-OmniX"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Extract comprehensive scene properties from 360-degree equirectangular panoramas, including depth, normals, and PBR materials, using OmniX adapters with Flux."
|
||||
"description": "360° panoramic depth estimation with multi-plane synchronization for ComfyUI, featuring equirectangular-cubemap transformations, cross-face consistency, and boundary blending for seamless depth maps."
|
||||
},
|
||||
{
|
||||
"author": "vaishnav-vn",
|
||||
@ -33501,6 +33512,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A set of ComfyUI nodes for calling the Nano-Banana API , while also supporting the Google API and frankAI API."
|
||||
},
|
||||
{
|
||||
"author": "fr0nky0ng",
|
||||
"title": "ComfyUI-JSON-Prompt",
|
||||
"reference": "https://github.com/fr0nky0ng/ComfyUI-JSON-Prompt",
|
||||
"files": [
|
||||
"https://github.com/fr0nky0ng/ComfyUI-JSON-Prompt"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom node for ComfyUI that generates JSON prompts from natural language descriptions to improve text-to-image generation quality. Supports local LLM integration via Ollama or Google Gemini API."
|
||||
},
|
||||
{
|
||||
"author": "Tr1dae",
|
||||
"title": "LoRA Matcher Nodes for ComfyUI",
|
||||
@ -33701,7 +33722,17 @@
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node that automatically calculates optimal output dimensions for Google's Nano Banana image editing model, supporting 22 aspect ratio buckets and ensuring pixel-perfect outputs without shifting or cropping."
|
||||
},
|
||||
},
|
||||
{
|
||||
"author": "comrender",
|
||||
"title": "ComfyUI-edge-match-checker",
|
||||
"reference": "https://github.com/comrender/ComfyUI-edge-match-checker",
|
||||
"files": [
|
||||
"https://github.com/comrender/ComfyUI-edge-match-checker"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Node comparing two image masks or images with adjustable overlap threshold (default 95%) for detecting minor shifts and mismatches in proportions, suitable for automated post-processing validation. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "DecartAI",
|
||||
"title": "Lucy-Edit-ComfyUI",
|
||||
@ -33755,6 +33786,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom TTS node that clones voice from a reference audio and speaks entered text."
|
||||
},
|
||||
{
|
||||
"author": "sbcode",
|
||||
"title": "Remove Background",
|
||||
"reference": "https://github.com/Sean-Bradley/ComfyUI-Remove-Background",
|
||||
"files": [
|
||||
"https://github.com/Sean-Bradley/ComfyUI-Remove-Background"
|
||||
],
|
||||
"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": "LukeCoulson1",
|
||||
"title": "ComfyUI LoRA Combine Node",
|
||||
@ -34353,6 +34394,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom ComfyUI node for managing image generation prompts using Pinecone vector database with OpenAI embeddings. Features interactive approval with image preview for quality control."
|
||||
},
|
||||
{
|
||||
"author": "Hearmeman24",
|
||||
"title": "ComfyUI-LoRAPlotNode",
|
||||
"reference": "https://github.com/Hearmeman24/ComfyUI-LoRAPlotNode",
|
||||
"files": [
|
||||
"https://github.com/Hearmeman24/ComfyUI-LoRAPlotNode"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom ComfyUI node for testing multiple LoRA models across different strength values. Automatically generates model/clip pairs for each LoRA-strength combination and includes an image saver node with text overlay for easy identification."
|
||||
},
|
||||
{
|
||||
"author": "piscesbody",
|
||||
"title": "ComfyUI-Upscale-CUDAspeed",
|
||||
@ -34865,6 +34916,26 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes to use Depth Anything V3 - the latest depth estimation model from ByteDance. For now monocular depth, camera pose estimation and 3D point clouds/gaussians are supported. Models autodownload from HuggingFace (depth-anything org). This is a first draft, let me know if you have any feedback! :)"
|
||||
},
|
||||
{
|
||||
"author": "PozzettiAndrea",
|
||||
"title": "ComfyUI-SAM3",
|
||||
"reference": "https://github.com/PozzettiAndrea/ComfyUI-SAM3",
|
||||
"files": [
|
||||
"https://github.com/PozzettiAndrea/ComfyUI-SAM3"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI integration for Meta's SAM3 model enabling open-vocabulary image segmentation using natural language text prompts, with automatic model download, geometric refinement, and flexible confidence thresholds."
|
||||
},
|
||||
{
|
||||
"author": "pznodes",
|
||||
"title": "ComfyUI-SAM3DBody",
|
||||
"reference": "https://github.com/PozzettiAndrea/ComfyUI-SAM3DBody",
|
||||
"files": [
|
||||
"https://github.com/PozzettiAndrea/ComfyUI-SAM3DBody"
|
||||
],
|
||||
"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": "rookiestar28",
|
||||
"title": "Danbooru Tags Upsampler for ComfyUI",
|
||||
@ -34876,6 +34947,17 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Makes the prompts for generating anime images more detailed by upsampling Danbooru tags."
|
||||
},
|
||||
{
|
||||
"author": "rookiestar28",
|
||||
"title": "ComfyUI Text Processor",
|
||||
"id": "ComfyUI_Text_Processor",
|
||||
"reference": "https://github.com/rookiestar28/ComfyUI_Text_Processor",
|
||||
"files": [
|
||||
"https://github.com/rookiestar28/ComfyUI_Text_Processor"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "An advanced text processing node for ComfyUI."
|
||||
},
|
||||
{
|
||||
"author": "MoonMoon82",
|
||||
"title": "ClipVision_Tools",
|
||||
@ -34956,6 +35038,101 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A comprehensive suite of AI-powered prompt enhancement nodes for ComfyUI using local LLMs (LM Studio or Ollama). Transform simple prompts into detailed, platform-optimized descriptions for video and image generation."
|
||||
},
|
||||
{
|
||||
"author": "EricRollei",
|
||||
"title": "Comfy_HunyuanImage3",
|
||||
"reference": "https://github.com/EricRollei/Comfy_HunyuanImage3",
|
||||
"files": [
|
||||
"https://github.com/EricRollei/Comfy_HunyuanImage3"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Professional ComfyUI custom nodes for Tencent's HunyuanImage-3.0 80B multimodal model, with multiple loading modes, smart memory management, large image generation with CPU offload, and optional prompt enhancement via LLM APIs."
|
||||
},
|
||||
{
|
||||
"author": "EricRollei",
|
||||
"title": "Eric_Image_Processing_Nodes",
|
||||
"reference": "https://github.com/EricRollei/Eric_Image_Processing_Nodes",
|
||||
"files": [
|
||||
"https://github.com/EricRollei/Eric_Image_Processing_Nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A comprehensive collection of advanced image processing nodes for ComfyUI, featuring state-of-the-art denoising, enhancement, and restoration techniques with GPU acceleration and specialized film grain processing."
|
||||
},
|
||||
{
|
||||
"title": "Download Tools for ComfyUI",
|
||||
"reference": "https://github.com/EricRollei/Download_Tools",
|
||||
"files": [
|
||||
"https://github.com/EricRollei/Download_Tools"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Comprehensive media downloading and web scraping nodes for ComfyUI. Download from 1000+ websites including Instagram, Reddit, Twitter, YouTube, TikTok using gallery-dl, yt-dlp, and advanced web scraping. Features: Gallery-dl downloader (100+ sites), Yt-dlp downloader (1000+ platforms), Web Image Scraper with 15+ site-specific handlers, browser cookie authentication, MCP integration for Claude Desktop.",
|
||||
"author": "Eric Hiss (EricRollei)",
|
||||
"nodename_pattern": "(Gallery-dl|Yt-dlp|Web.*Scraper)",
|
||||
"tags": [
|
||||
"download",
|
||||
"scraper",
|
||||
"web",
|
||||
"gallery-dl",
|
||||
"yt-dlp",
|
||||
"instagram",
|
||||
"youtube",
|
||||
"twitter",
|
||||
"reddit",
|
||||
"media",
|
||||
"video",
|
||||
"image",
|
||||
"tiktok",
|
||||
"deviantart",
|
||||
"pixiv"
|
||||
]
|
||||
},
|
||||
{
|
||||
"author": "EricRollei",
|
||||
"title": "PDF Tools - Advanced PDF Processing & OCR",
|
||||
"id": "pdf-tools",
|
||||
"reference": "https://github.com/EricRollei/PDF-Tools",
|
||||
"files": [
|
||||
"https://github.com/EricRollei/PDF-Tools"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Advanced PDF processing, OCR, Image and text parsing, smart image crop nodes for ComfyUI. Features include multi-language OCR (Surya, PaddleOCR VL), AI vision analysis (Florence-2, LayoutLMv3), advanced PDF extraction with quality assessment, spread detection for scanned books, and comprehensive layout analysis. Supports 90+ languages with multiple output formats.",
|
||||
"tags": [
|
||||
"PDF",
|
||||
"OCR",
|
||||
"document",
|
||||
"vision",
|
||||
"Florence-2",
|
||||
"Surya",
|
||||
"PaddleOCR",
|
||||
"LayoutLMv3",
|
||||
"multilingual",
|
||||
"layout-analysis"
|
||||
],
|
||||
"category": "Document Processing"
|
||||
},
|
||||
{
|
||||
"author": "EricRollei",
|
||||
"title": "AAA Metadata System",
|
||||
"id": "aaa-metadata-system",
|
||||
"reference": "https://github.com/EricRollei/AAA_Metadata_System",
|
||||
"files": [
|
||||
"https://github.com/EricRollei/AAA_Metadata_System"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Advanced metadata management and multi-format image save system for ComfyUI. Save/load with metadata for PNG, JPEG, TIFF, PSD (with layers), SVG, and WebP. Features XMP/TXT/JSON sidecar files, embedded EXIF/XMP, MWG-RS regions for face metadata, workflow tracking, LoRA/embedding detection, runtime execution hooks, and Automatic1111 compatibility. Preserve layers, alpha channels, and complete provenance across all formats.",
|
||||
"nodename_pattern": "^(MetadataAwareSaveImage|Multi_LoRA_Loader|LoadImageLayers)"
|
||||
},
|
||||
{
|
||||
"author": "EricRollei",
|
||||
"title": "HYPIR Image Restoration for ComfyUI",
|
||||
"reference": "https://github.com/EricRollei/HYPIR-ComfyUI",
|
||||
"files": [
|
||||
"https://github.com/EricRollei/HYPIR-ComfyUI"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom ComfyUI nodes for HYPIR image restoration using Stable Diffusion 2.1. Restores and upscales scanned or generated images with optional LM Studio prompt enhancement and tiled VAE processing for large resolutions.",
|
||||
"nodename_pattern": "HYPIR"
|
||||
},
|
||||
{
|
||||
"author": "nomadoor",
|
||||
"title": "ComfyUI Temporal Mask Tools",
|
||||
@ -35308,16 +35485,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Simple UI extension to track Modal GPU credits in real-time."
|
||||
},
|
||||
{
|
||||
"author": "spiralmountain",
|
||||
"title": "ComfyUI_HDNodes",
|
||||
"reference": "https://github.com/spiralmountain/ComfyUI_HDNodes",
|
||||
"files": [
|
||||
"https://github.com/spiralmountain/ComfyUI_HDNodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom nodes for ComfyUI that enable video generation using ByteDance's Seedance model via [a/Fal.ai](https://fal.ai/)."
|
||||
},
|
||||
{
|
||||
"author": "apenguin24",
|
||||
"title": "ComfyUI-WanKeyframing",
|
||||
@ -35398,6 +35565,26 @@
|
||||
"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",
|
||||
"reference": "https://github.com/wallen0322/ComfyUI-AE-Animation",
|
||||
"files": [
|
||||
"https://github.com/wallen0322/ComfyUI-AE-Animation"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "After Effects-style animation nodes for ComfyUI with timeline-based keyframe control, layer management, and real-time preview rendering. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "KursatAs",
|
||||
"title": "Comfyui Krs Nodes",
|
||||
@ -35527,6 +35714,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom nodes to convert images to pen plotter files"
|
||||
},
|
||||
{
|
||||
"author": "wouterverweirder",
|
||||
"title": "ComfyUI SAM3",
|
||||
"reference": "https://github.com/wouterverweirder/comfyui_sam3",
|
||||
"files": [
|
||||
"https://github.com/wouterverweirder/comfyui_sam3"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom Nodes to work with SAM3"
|
||||
},
|
||||
{
|
||||
"author": "Aishor",
|
||||
"title": "Meta-Sampler Guiado (Seed-WAN)",
|
||||
@ -36038,6 +36235,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "NVIDIA ModelOpt integration for ComfyUI - Quantize and optimize diffusion models with INT8/FP8/INT4"
|
||||
},
|
||||
{
|
||||
"author": "EnragedAntelope",
|
||||
"title": "ComfyUI_EasyRegion",
|
||||
"reference": "https://github.com/EnragedAntelope/ComfyUI_EasyRegion",
|
||||
"files": [
|
||||
"https://github.com/EnragedAntelope/ComfyUI_EasyRegion"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Control different parts of your image with separate prompts using visual box drawing."
|
||||
},
|
||||
{
|
||||
"author": "tester4488",
|
||||
"title": "mc_qwen",
|
||||
@ -36118,6 +36325,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Simple implementation of [a/ByteDance Sa2VA](https://github.com/bytedance/Sa2VA) nodes for ComfyUI."
|
||||
},
|
||||
{
|
||||
"author": "alexjx",
|
||||
"title": "ComfyUI-XJNodes",
|
||||
"reference": "https://github.com/alexjx/ComfyUI-XJNodes",
|
||||
"files": [
|
||||
"https://github.com/alexjx/ComfyUI-XJNodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A modular collection of custom nodes for ComfyUI, organized by data type for easy navigation and maintenance."
|
||||
},
|
||||
{
|
||||
"author": "bowtiedbluefin",
|
||||
"title": "ComfyUI-AI-CustomURL",
|
||||
@ -36393,16 +36610,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A LLM node with some models. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "sean-hungerford",
|
||||
"title": "seedVR2_cudafull",
|
||||
"reference": "https://github.com/sean-hungerford/seedVR2_cudafull",
|
||||
"files": [
|
||||
"https://github.com/sean-hungerford/seedVR2_cudafull"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Application for upscaling videos and images with multi-GPU support, offering a user-friendly interface and high-quality results with minimal effort."
|
||||
},
|
||||
{
|
||||
"author": "tiheaven",
|
||||
"title": "Ps-Comfy-TiHeaveN-CustomNodes",
|
||||
@ -36514,16 +36721,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Dual implementation of reference-based video colorization featuring ColorMNet (2024) with DINOv2 and Deep Exemplar (2019). Includes 4 nodes (2 video, 2 image), multiple feature encoders (VGG19, DINOv2, CLIP), advanced post-processing (color-matcher, WLS, guided, bilateral), and auto-installer for dependencies."
|
||||
},
|
||||
{
|
||||
"author": "Fablestarexpanse",
|
||||
"title": "Timer-Node-Comfyui",
|
||||
"reference": "https://github.com/Fablestarexpanse/Timer-Node-Comfyui",
|
||||
"files": [
|
||||
"https://github.com/Fablestarexpanse/Timer-Node-Comfyui"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom ComfyUI node that displays live processing time in a red digital countdown clock format, perfect for monitoring image generation times and tracking performance between workflow nodes."
|
||||
},
|
||||
{
|
||||
"author": "liming123332",
|
||||
"title": "ComfyUI-Ranbooru",
|
||||
@ -36564,16 +36761,302 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Human-in-the-loop image selection tool for ComfyUI workflows using a Flask web server, enabling users to pause workflows and interactively select images via a web browser interface."
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
{
|
||||
"author": "Devin Garner",
|
||||
"title": "ComfyUI_Make-It-Animatable",
|
||||
"reference": "https://github.com/speige/ComfyUI_Make-It-Animatable",
|
||||
"files": [
|
||||
"https://github.com/speige/ComfyUI_Make-It-Animatable"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Auto-Rigging humanoid 3D meshes for Mixamo animations"
|
||||
},
|
||||
{
|
||||
"author": "hua1995116",
|
||||
"title": "comfyui_goenhance_ffmpeg_wm",
|
||||
"reference": "https://github.com/hua1995116/comfyui_goenhance_ffmpeg_wm",
|
||||
"files": [
|
||||
"https://github.com/hua1995116/comfyui_goenhance_ffmpeg_wm"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node for adding watermarks to videos using FFmpeg, with configurable position, opacity, scale, and hardware acceleration support."
|
||||
},
|
||||
{
|
||||
"author": "wzyfromhust",
|
||||
"title": "ComfyUI_SAM2UltraV2",
|
||||
"reference": "https://github.com/wzyfromhust/ComfyUI_SAM2UltraV2",
|
||||
"files": [
|
||||
"https://github.com/wzyfromhust/ComfyUI_SAM2UltraV2"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A fully modular and high-performance implementation of SAM2 (Segment Anything Model 2) for ComfyUI with dual-prompt support, negative point sampling, and upper body segmentation."
|
||||
},
|
||||
{
|
||||
"author": "slahiri",
|
||||
"title": "ComfyUI-AI-Photography-Toolkit",
|
||||
"reference": "https://github.com/slahiri/ComfyUI-AI-Photography-Toolkit",
|
||||
"files": [
|
||||
"https://github.com/slahiri/ComfyUI-AI-Photography-Toolkit"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A collection of AI-powered photography and image generation tools for ComfyUI, featuring the SID_AIPromptGenerator node that uses Anthropic's Claude API to analyze images and generate optimized prompts for various image generation models."
|
||||
},
|
||||
{
|
||||
"author": "neonr0",
|
||||
"title": "ComfyUI-PixelConstrainedScaler",
|
||||
"reference": "https://github.com/neonr-0/ComfyUI-PixelConstrainedScaler",
|
||||
"files": [
|
||||
"https://github.com/neonr-0/ComfyUI-PixelConstrainedScaler"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Smart upscaling with pixel-budget awareness while preserving native aspect ratios. Ideal for Image to Image (I2I) and Image to Video (I2V) workflows!"
|
||||
},
|
||||
{
|
||||
"author": "swan7-py",
|
||||
"title": "ComfyUI-ImageAlphaCrop",
|
||||
"reference": "https://github.com/swan7-py/ComfyUI-ImageAlphaCrop",
|
||||
"files": [
|
||||
"https://github.com/swan7-py/ComfyUI-ImageAlphaCrop"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI plugin for automatically cropping transparent alpha channel borders from images - ideal for processing logos and icons. Supports batch processing with adjustable padding and alpha threshold. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "huyl3-cpu",
|
||||
"title": "comfyui-huyl2-nodes",
|
||||
"reference": "https://github.com/huyl3-cpu/comfyui-sortlist",
|
||||
"files": [
|
||||
"https://github.com/huyl3-cpu/comfyui-sortlist"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom utility nodes for ComfyUI by huyl2 (sort list v2, etc.)"
|
||||
},
|
||||
{
|
||||
"author": "7BEII",
|
||||
"title": "comfyui-PD_comfy-api-node",
|
||||
"reference": "https://github.com/7BEII/comfyui-PD_comfy-api-node",
|
||||
"files": [
|
||||
"https://github.com/7BEII/comfyui-PD_comfy-api-node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node suite integrating multiple AI image generation APIs (Gemini, Flux.1 Kontext Pro) with unified authentication via ComfyUI API Key and real-time cost tracking. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "StarIICraft",
|
||||
"title": "ComfyUI-Simple-Selector",
|
||||
"reference": "https://github.com/StarIICraft/ComfyUI-Simple-Selector",
|
||||
"files": [
|
||||
"https://github.com/StarIICraft/ComfyUI-Simple-Selector"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Logic control node with 5 universal input ports that checks connections in reverse priority order and outputs the index of the first valid active input, with support for muted nodes and any data type."
|
||||
},
|
||||
{
|
||||
"author": "wwzhifeng",
|
||||
"title": "comfyui-jsonprompt",
|
||||
"reference": "https://github.com/wwzhifeng/comfyui-jsonprompt",
|
||||
"files": [
|
||||
"https://github.com/wwzhifeng/comfyui-jsonprompt"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom ComfyUI node that expands structured JSON text into standard prompts for use with models like Gemini, Flux, OpenAI, and Sora. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "hobinrude",
|
||||
"title": "ComfyUI_DWposeDeluxe",
|
||||
"reference": "https://github.com/hobinrude/ComfyUI_DWposeDeluxe",
|
||||
"files": [
|
||||
"https://github.com/hobinrude/ComfyUI_DWposeDeluxe"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom ComfyUI node integrating DW-Pose (Denoising Whole-Body Pose Estimation) for high-quality pose detection with CPU (ONNX) and GPU (TensorRT) support. Features 20x faster performance with TensorRT acceleration, automatic model downloading, customizable pose visualization, keypoint conversion, and video workflow integration."
|
||||
},
|
||||
{
|
||||
"author": "Writili",
|
||||
"title": "WtlNodes",
|
||||
"id": "wtlnodes",
|
||||
"reference": "https://github.com/Scorpiosis0/ComfyUI-WtlNodes",
|
||||
"files": [
|
||||
"https://github.com/Scorpiosis0/ComfyUI-WtlNodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This node adds improvement over some already existing nodes as well as some custom nodes."
|
||||
},
|
||||
{
|
||||
"author": "yuanyuan-spec",
|
||||
"title": "HunyuanVideo-1.5 nodes",
|
||||
"reference": "https://github.com/yuanyuan-spec/comfyui_hunyuanvideo_1.5_plugin",
|
||||
"files": [
|
||||
"https://github.com/yuanyuan-spec/comfyui_hunyuanvideo_1.5_plugin"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI plugin based on HunyuanVideo-1.5, offering both simplified and complete node sets for quick usage or deep workflow customization."
|
||||
},
|
||||
{
|
||||
"author": "Madiator2011",
|
||||
"title": "ComfyUI RunpodDirect",
|
||||
"id": "runpoddirect",
|
||||
"reference": "https://github.com/MadiatorLabs/ComfyUI-RunpodDirect",
|
||||
"files": [
|
||||
"https://github.com/MadiatorLabs/ComfyUI-RunpodDirect"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Direct model downloads to your Runod pod with blazing-fast multi-connection support. No more downloading models to your local machine and re-uploading!"
|
||||
},
|
||||
{
|
||||
"author": "kjqwer",
|
||||
"title": "SmartSaveImage",
|
||||
"reference": "https://github.com/kjqwer/SmartSaveImage",
|
||||
"files": [
|
||||
"https://github.com/kjqwer/SmartSaveImage"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Smart Image Saving Nodes - Offers intelligent folder management and image saving capabilities, supporting flexible folder hierarchy control, multiple metadata sources, various image formats, and metadata embedding. It includes two nodes: SmartFolderManager and SmartImageSaver.",
|
||||
"pip": ["Pillow", "piexif"],
|
||||
"nodename_pattern": "Smart"
|
||||
},
|
||||
{
|
||||
"author": "danielpflorian",
|
||||
"title": "ComfyUI-WorkflowGenerator",
|
||||
"reference": "https://github.com/DanielPFlorian/ComfyUI-WorkflowGenerator",
|
||||
"files": [
|
||||
"https://github.com/DanielPFlorian/ComfyUI-WorkflowGenerator"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI-WorkflowGenerator custom nodes for generating ComfyUI workflows from natural language"
|
||||
},
|
||||
{
|
||||
"author": "Icekiub",
|
||||
"title": "ComfyUI-IcyHider",
|
||||
"id": "text_processor",
|
||||
"reference": "https://github.com/icekiub-ai/ComfyUI-IcyHider",
|
||||
"files": [
|
||||
"https://github.com/icekiub-ai/ComfyUI-IcyHider"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom node extension that hides image previews until you hover over the node."
|
||||
},
|
||||
{
|
||||
"author": "turisc",
|
||||
"title": "Text Line Selector",
|
||||
"reference": "https://github.com/TuriSc/comfyui-text-line-selector",
|
||||
"files": [
|
||||
"https://github.com/TuriSc/comfyui-text-line-selector"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Extracts a single line from multiline string. Useful for batch processing"
|
||||
},
|
||||
{
|
||||
"author": "FuryNocturnTV",
|
||||
"title": "ComfyUI-Studio-Fury",
|
||||
"reference": "https://github.com/FuryNocturn/ComfyUI-Studio-Fury",
|
||||
"files": [
|
||||
"https://github.com/FuryNocturn/ComfyUI-Studio-Fury"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodos custom, al estilo fury, nodos que añaden versatilidad. con el tiempo ira creciendo los nodos."
|
||||
},
|
||||
{
|
||||
"author": "FuryNocturn",
|
||||
"title": "ComfyUI-Dummy_Node_Pack",
|
||||
"reference": "https://github.com/FuryNocturn/ComfyUI-Dummy_Node_Pack",
|
||||
"files": [
|
||||
"https://github.com/FuryNocturn/ComfyUI-Dummy_Node_Pack"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom node pack creating fake/dummy nodes to replace missing, obsolete, or cloud-specific nodes, allowing legacy workflows to load visually without errors while preserving connections. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "granddyser",
|
||||
"title": "Wan-video-extender",
|
||||
"reference": "https://github.com/Granddyser/wan-video-extender",
|
||||
"files": [
|
||||
"https://github.com/Granddyser/wan-video-extender"
|
||||
],
|
||||
"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": "Keybinding Extra",
|
||||
"reference": "https://github.com/akawana/ComfyUI-Keybinding-extra",
|
||||
"files": [
|
||||
"https://github.com/akawana/ComfyUI-Keybinding-extra"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Adds shortcuts for commenting and deleting lines of text, with a configurable comment symbol. Includes a node that cleans comments from text and splits content using tags for Regional Prompting.",
|
||||
"tags": ["frontend", "shortcut", "utility"]
|
||||
},
|
||||
{
|
||||
"author": "lovisdotio",
|
||||
"title": "ComfyUI-Replace-First-Frame-Last-Frame",
|
||||
"reference": "https://github.com/lovisdotio/ComfyUI-Replace-First-Frame-Last-Frame",
|
||||
"files": [
|
||||
"https://github.com/lovisdotio/ComfyUI-Replace-First-Frame-Last-Frame"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Replace the first and last frames of an image sequence in ComfyUI. Auto-resizes frames to match video dimensions, handles batches, and adjusts parameters if needed."
|
||||
},
|
||||
{
|
||||
"author": "yukascomfy",
|
||||
"title": "ATI_AudioReactive",
|
||||
"reference": "https://github.com/yukascomfy/ATI_AudioReactive",
|
||||
"files": [
|
||||
"https://github.com/yukascomfy/ATI_AudioReactive"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI audio-reactive animation node combining RyanOnTheInside's reactive features with Fillip's path animation for creating audio-driven visual animations. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "techzuhaib",
|
||||
"title": "FaceCLIP-ComfyUI",
|
||||
"reference": "https://github.com/techzuhaib/FaceCLIP-ComfyUI",
|
||||
"files": [
|
||||
"https://github.com/techzuhaib/FaceCLIP-ComfyUI"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "FaceCLIP nodes for ComfyUI providing joint embeddings from aligned face images plus text prompts, and identity-preserving image synthesis using fine-tuned SDXL UNet. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "tuki0918",
|
||||
"title": "comfyui-image-expand-nodes",
|
||||
"reference": "https://github.com/tuki0918/comfyui-image-expand-nodes",
|
||||
"files": [
|
||||
"https://github.com/tuki0918/comfyui-image-expand-nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom nodes for ComfyUI to expand images with noise for outpainting or inpainting purposes. This allows for seamless image extension in any direction."
|
||||
},
|
||||
{
|
||||
"author": "tuki0918",
|
||||
"title": "comfyui-image-tiled-nodes",
|
||||
"reference": "https://github.com/tuki0918/comfyui-image-tiled-nodes",
|
||||
"files": [
|
||||
"https://github.com/tuki0918/comfyui-image-tiled-nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom ComfyUI nodes that split large images into overlapping tiles for processing and merge them back seamlessly with feathering blending. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "NeoDroleDeGueule",
|
||||
"title": "NDDG_Great_Nodes",
|
||||
"reference": "https://github.com/NeoDroleDeGueule/NDDG_Great_Nodes",
|
||||
"files": [
|
||||
"https://github.com/NeoDroleDeGueule/NDDG_Great_Nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NDDG Great Nodes - ComfyUI custom nodes featuring Great Conditioning Modifier with advanced semantic drift, token dropout, gradient amplification and other conceptual manipulation tools. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "aining2022",
|
||||
"title": "ComfyUI_Swwan",
|
||||
"reference": "https://github.com/aining2022/ComfyUI_Swwan",
|
||||
"files": [
|
||||
"https://github.com/aining2022/ComfyUI_Swwan"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Collection of image processing utility nodes for ComfyUI including intelligent cropping, aspect ratio scaling, and crop box restoration capabilities. (Description by CC)"
|
||||
},
|
||||
|
||||
|
||||
|
||||
@ -37009,6 +37492,6 @@
|
||||
],
|
||||
"install_type": "unzip",
|
||||
"description": "This is a node to convert an image into a CMYK Halftone dot image."
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
9632
github-stats.json
9632
github-stats.json
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -169,6 +169,16 @@
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A fork of KJNodes for ComfyUI.\nVarious quality of life -nodes for ComfyUI, mostly just visual stuff to improve usability"
|
||||
},
|
||||
{
|
||||
"author": "huixingyun",
|
||||
"title": "ComfyUI-SoundFlow",
|
||||
"reference": "https://github.com/huixingyun/ComfyUI-SoundFlow",
|
||||
"files": [
|
||||
"https://github.com/huixingyun/ComfyUI-SoundFlow"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "forked from https://github.com/fredconex/ComfyUI-SoundFlow (removed)"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1,5 +1,115 @@
|
||||
{
|
||||
"custom_nodes": [
|
||||
{
|
||||
"author": "cedarconnor",
|
||||
"title": "ComfyUI-GEN3C-Gsplat [REMOVED]",
|
||||
"reference": "https://github.com/cedarconnor/ComfyUI-GEN3C-Gsplat",
|
||||
"files": [
|
||||
"https://github.com/cedarconnor/ComfyUI-GEN3C-Gsplat"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom ComfyUI node pack that bridges Cosmos/GEN3C video generation with in-graph Gaussian Splat (3DGS) training. It adds camera/trajectory tooling, dataset exporters, and two training backends (Nerfstudio CLI wrapper and an in-process gsplat optimizer) so artists can go from prompt to splat entirely inside ComfyUI.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "dowa-git",
|
||||
"title": "comfyui-dowa [REMOVED]",
|
||||
"reference": "https://github.com/dowa-git/comfyui-dowa",
|
||||
"files": [
|
||||
"https://github.com/dowa-git/comfyui-dowa"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Professional navigation bar widget for ComfyUI with JWT-based user authentication, workflow templates, and team collaboration features in a purple gradient design."
|
||||
},
|
||||
{
|
||||
"author": "Fablestarexpanse",
|
||||
"title": "Timer-Node-Comfyui [REMOVED]",
|
||||
"reference": "https://github.com/Fablestarexpanse/Timer-Node-Comfyui",
|
||||
"files": [
|
||||
"https://github.com/Fablestarexpanse/Timer-Node-Comfyui"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom ComfyUI node that displays live processing time in a red digital countdown clock format, perfect for monitoring image generation times and tracking performance between workflow nodes."
|
||||
},
|
||||
{
|
||||
"author": "cedarconnor",
|
||||
"title": "ComfyUI-OmniX [REMOVED]",
|
||||
"reference": "https://github.com/cedarconnor/ComfyUI-OmniX",
|
||||
"files": [
|
||||
"https://github.com/cedarconnor/ComfyUI-OmniX"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Extract comprehensive scene properties from 360-degree equirectangular panoramas, including depth, normals, and PBR materials, using OmniX adapters with Flux."
|
||||
},
|
||||
{
|
||||
"author": "cedarconnor",
|
||||
"title": "ComfyUI-DiT360 [REMOVED]",
|
||||
"reference": "https://github.com/cedarconnor/ComfyUI-DiT360",
|
||||
"files": [
|
||||
"https://github.com/cedarconnor/ComfyUI-DiT360"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Generate high-fidelity 360-degree panoramic images using the DiT360 diffusion transformer model in ComfyUI."
|
||||
},
|
||||
{
|
||||
"author": "PozzettiAndrea",
|
||||
"title": "ComfyUI-AnyTop [REMOVED]",
|
||||
"reference": "https://github.com/PozzettiAndrea/ComfyUI-AnyTop",
|
||||
"files": [
|
||||
"https://github.com/PozzettiAndrea/ComfyUI-AnyTop"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Standalone ComfyUI custom nodes for AnyTop - Universal Motion Generation for Any Skeleton Topology."
|
||||
},
|
||||
{
|
||||
"author": "penposs",
|
||||
"title": "ComfyUI-Banana-Node [REMOVED]",
|
||||
"reference": "https://github.com/penposs/ComfyUI-Banana-Node",
|
||||
"files": [
|
||||
"https://github.com/penposs/ComfyUI-Banana-Node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom node for ComfyUI that generates images using Google’s Gemini 2.5 Flash Image Preview API."
|
||||
},
|
||||
{
|
||||
"author": "spiralmountain",
|
||||
"title": "ComfyUI_HDNodes [REMOVED]",
|
||||
"reference": "https://github.com/spiralmountain/ComfyUI_HDNodes",
|
||||
"files": [
|
||||
"https://github.com/spiralmountain/ComfyUI_HDNodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom nodes for ComfyUI that enable video generation using ByteDance's Seedance model via [a/Fal.ai](https://fal.ai/)."
|
||||
},
|
||||
{
|
||||
"author": "fredconex",
|
||||
"title": "Sync Edit [REMOVED]",
|
||||
"reference": "https://github.com/fredconex/ComfyUI-SyncEdit",
|
||||
"files": [
|
||||
"https://github.com/fredconex/ComfyUI-SyncEdit"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This node allow to intercept changes on the input string and choose between use the current one or sync with incoming new one."
|
||||
},
|
||||
{
|
||||
"author": "fredconex",
|
||||
"title": "ComfyUI-SoundFlow [REMOVED]",
|
||||
"reference": "https://github.com/fredconex/ComfyUI-SoundFlow",
|
||||
"files": [
|
||||
"https://github.com/fredconex/ComfyUI-SoundFlow"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This is a bunch of nodes for ComfyUI to help with sound work."
|
||||
},
|
||||
{
|
||||
"author": "fredconex",
|
||||
"title": "SongBloom [REMOVED]",
|
||||
"reference": "https://github.com/fredconex/ComfyUI-SongBloom",
|
||||
"files": [
|
||||
"https://github.com/fredconex/ComfyUI-SongBloom"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI Nodes for SongBloom"
|
||||
},
|
||||
{
|
||||
"author": "EQXai",
|
||||
"title": "ComfyUI_EQX [REMOVED]",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
403
scanner.py
403
scanner.py
@ -7,6 +7,8 @@ import concurrent
|
||||
import datetime
|
||||
import concurrent.futures
|
||||
import requests
|
||||
import warnings
|
||||
import argparse
|
||||
|
||||
builtin_nodes = set()
|
||||
|
||||
@ -39,27 +41,51 @@ def download_url(url, dest_folder, filename=None):
|
||||
raise Exception(f"Failed to download file from {url}")
|
||||
|
||||
|
||||
# prepare temp dir
|
||||
if len(sys.argv) > 1:
|
||||
temp_dir = sys.argv[1]
|
||||
else:
|
||||
temp_dir = os.path.join(os.getcwd(), ".tmp")
|
||||
def parse_arguments():
|
||||
"""Parse command-line arguments"""
|
||||
parser = argparse.ArgumentParser(
|
||||
description='ComfyUI Manager Node Scanner',
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
epilog='''
|
||||
Examples:
|
||||
# Standard mode
|
||||
python3 scanner.py
|
||||
python3 scanner.py --skip-update
|
||||
|
||||
if not os.path.exists(temp_dir):
|
||||
os.makedirs(temp_dir)
|
||||
# Scan-only mode
|
||||
python3 scanner.py --scan-only temp-urls-clean.list
|
||||
python3 scanner.py --scan-only urls.list --temp-dir /custom/temp
|
||||
python3 scanner.py --scan-only urls.list --skip-update
|
||||
'''
|
||||
)
|
||||
|
||||
parser.add_argument('--scan-only', type=str, metavar='URL_LIST_FILE',
|
||||
help='Scan-only mode: provide URL list file (one URL per line)')
|
||||
parser.add_argument('--temp-dir', type=str, metavar='DIR',
|
||||
help='Temporary directory for cloned repositories')
|
||||
parser.add_argument('--skip-update', action='store_true',
|
||||
help='Skip git clone/pull operations')
|
||||
parser.add_argument('--skip-stat-update', action='store_true',
|
||||
help='Skip GitHub stats collection')
|
||||
parser.add_argument('--skip-all', action='store_true',
|
||||
help='Skip all update operations')
|
||||
|
||||
# Backward compatibility: positional argument for temp_dir
|
||||
parser.add_argument('temp_dir_positional', nargs='?', metavar='TEMP_DIR',
|
||||
help='(Legacy) Temporary directory path')
|
||||
|
||||
args = parser.parse_args()
|
||||
return args
|
||||
|
||||
|
||||
skip_update = '--skip-update' in sys.argv or '--skip-all' in sys.argv
|
||||
skip_stat_update = '--skip-stat-update' in sys.argv or '--skip-all' in sys.argv
|
||||
|
||||
if not skip_stat_update:
|
||||
auth = Auth.Token(os.environ.get('GITHUB_TOKEN'))
|
||||
g = Github(auth=auth)
|
||||
else:
|
||||
g = None
|
||||
|
||||
|
||||
print(f"TEMP DIR: {temp_dir}")
|
||||
# Module-level variables (will be set in main if running as script)
|
||||
args = None
|
||||
scan_only_mode = False
|
||||
url_list_file = None
|
||||
temp_dir = None
|
||||
skip_update = False
|
||||
skip_stat_update = True
|
||||
g = None
|
||||
|
||||
|
||||
parse_cnt = 0
|
||||
@ -74,10 +100,13 @@ def extract_nodes(code_text):
|
||||
parse_cnt += 1
|
||||
|
||||
code_text = re.sub(r'\\[^"\']', '', code_text)
|
||||
parsed_code = ast.parse(code_text)
|
||||
with warnings.catch_warnings():
|
||||
warnings.filterwarnings('ignore', category=SyntaxWarning)
|
||||
warnings.filterwarnings('ignore', category=DeprecationWarning)
|
||||
parsed_code = ast.parse(code_text)
|
||||
|
||||
assignments = (node for node in parsed_code.body if isinstance(node, ast.Assign))
|
||||
|
||||
|
||||
for assignment in assignments:
|
||||
if isinstance(assignment.targets[0], ast.Name) and assignment.targets[0].id in ['NODE_CONFIG', 'NODE_CLASS_MAPPINGS']:
|
||||
node_class_mappings = assignment.value
|
||||
@ -91,7 +120,7 @@ def extract_nodes(code_text):
|
||||
for key in node_class_mappings.keys:
|
||||
if key is not None and isinstance(key.value, str):
|
||||
s.add(key.value.strip())
|
||||
|
||||
|
||||
return s
|
||||
else:
|
||||
return set()
|
||||
@ -99,6 +128,99 @@ def extract_nodes(code_text):
|
||||
return set()
|
||||
|
||||
|
||||
def has_comfy_node_base(class_node):
|
||||
"""Check if class inherits from io.ComfyNode or ComfyNode"""
|
||||
for base in class_node.bases:
|
||||
# Case 1: ComfyNode
|
||||
if isinstance(base, ast.Name) and base.id == 'ComfyNode':
|
||||
return True
|
||||
# Case 2: io.ComfyNode
|
||||
elif isinstance(base, ast.Attribute):
|
||||
if base.attr == 'ComfyNode':
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def extract_keyword_value(call_node, keyword):
|
||||
"""
|
||||
Extract string value of keyword argument
|
||||
Schema(node_id="MyNode") -> "MyNode"
|
||||
"""
|
||||
for kw in call_node.keywords:
|
||||
if kw.arg == keyword:
|
||||
# ast.Constant (Python 3.8+)
|
||||
if isinstance(kw.value, ast.Constant):
|
||||
if isinstance(kw.value.value, str):
|
||||
return kw.value.value
|
||||
# ast.Str (Python 3.7-) - suppress deprecation warning
|
||||
else:
|
||||
with warnings.catch_warnings():
|
||||
warnings.filterwarnings('ignore', category=DeprecationWarning)
|
||||
if hasattr(ast, 'Str') and isinstance(kw.value, ast.Str):
|
||||
return kw.value.s
|
||||
return None
|
||||
|
||||
|
||||
def is_schema_call(call_node):
|
||||
"""Check if ast.Call is io.Schema() or Schema()"""
|
||||
func = call_node.func
|
||||
if isinstance(func, ast.Name) and func.id == 'Schema':
|
||||
return True
|
||||
elif isinstance(func, ast.Attribute) and func.attr == 'Schema':
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def extract_node_id_from_schema(class_node):
|
||||
"""
|
||||
Extract node_id from define_schema() method
|
||||
"""
|
||||
for item in class_node.body:
|
||||
if isinstance(item, ast.FunctionDef) and item.name == 'define_schema':
|
||||
# Walk through function body
|
||||
for stmt in ast.walk(item):
|
||||
if isinstance(stmt, ast.Call):
|
||||
# Check if it's Schema() call
|
||||
if is_schema_call(stmt):
|
||||
node_id = extract_keyword_value(stmt, 'node_id')
|
||||
if node_id:
|
||||
return node_id
|
||||
return None
|
||||
|
||||
|
||||
def extract_v3_nodes(code_text):
|
||||
"""
|
||||
Extract V3 node IDs using AST parsing
|
||||
Returns: set of node_id strings
|
||||
"""
|
||||
global parse_cnt
|
||||
|
||||
try:
|
||||
if parse_cnt % 100 == 0:
|
||||
print(".", end="", flush=True)
|
||||
parse_cnt += 1
|
||||
|
||||
with warnings.catch_warnings():
|
||||
warnings.filterwarnings('ignore', category=SyntaxWarning)
|
||||
warnings.filterwarnings('ignore', category=DeprecationWarning)
|
||||
tree = ast.parse(code_text)
|
||||
except (SyntaxError, UnicodeDecodeError):
|
||||
return set()
|
||||
|
||||
nodes = set()
|
||||
|
||||
# Find io.ComfyNode subclasses
|
||||
for node in ast.walk(tree):
|
||||
if isinstance(node, ast.ClassDef):
|
||||
# Check if inherits from ComfyNode
|
||||
if has_comfy_node_base(node):
|
||||
node_id = extract_node_id_from_schema(node)
|
||||
if node_id:
|
||||
nodes.add(node_id)
|
||||
|
||||
return nodes
|
||||
|
||||
|
||||
# scan
|
||||
def scan_in_file(filename, is_builtin=False):
|
||||
global builtin_nodes
|
||||
@ -112,7 +234,11 @@ def scan_in_file(filename, is_builtin=False):
|
||||
nodes = set()
|
||||
class_dict = {}
|
||||
|
||||
# V1 nodes detection
|
||||
nodes |= extract_nodes(code)
|
||||
|
||||
# V3 nodes detection
|
||||
nodes |= extract_v3_nodes(code)
|
||||
code = re.sub(r'^#.*?$', '', code, flags=re.MULTILINE)
|
||||
|
||||
def extract_keys(pattern, code):
|
||||
@ -209,6 +335,53 @@ def get_nodes(target_dir):
|
||||
return py_files, directories
|
||||
|
||||
|
||||
def get_urls_from_list_file(list_file):
|
||||
"""
|
||||
Read URLs from list file for scan-only mode
|
||||
|
||||
Args:
|
||||
list_file (str): Path to URL list file (one URL per line)
|
||||
|
||||
Returns:
|
||||
list of tuples: [(url, "", None, None), ...]
|
||||
Format: (url, title, preemptions, nodename_pattern)
|
||||
- title: Empty string
|
||||
- preemptions: None
|
||||
- nodename_pattern: None
|
||||
|
||||
File format:
|
||||
https://github.com/owner/repo1
|
||||
https://github.com/owner/repo2
|
||||
# Comments starting with # are ignored
|
||||
|
||||
Raises:
|
||||
FileNotFoundError: If list_file does not exist
|
||||
"""
|
||||
if not os.path.exists(list_file):
|
||||
raise FileNotFoundError(f"URL list file not found: {list_file}")
|
||||
|
||||
urls = []
|
||||
with open(list_file, 'r', encoding='utf-8') as f:
|
||||
for line_num, line in enumerate(f, 1):
|
||||
line = line.strip()
|
||||
|
||||
# Skip empty lines and comments
|
||||
if not line or line.startswith('#'):
|
||||
continue
|
||||
|
||||
# Validate URL format (basic check)
|
||||
if not (line.startswith('http://') or line.startswith('https://')):
|
||||
print(f"WARNING: Line {line_num} is not a valid URL: {line}")
|
||||
continue
|
||||
|
||||
# Add URL with empty metadata
|
||||
# (url, title, preemptions, nodename_pattern)
|
||||
urls.append((line, "", None, None))
|
||||
|
||||
print(f"Loaded {len(urls)} URLs from {list_file}")
|
||||
return urls
|
||||
|
||||
|
||||
def get_git_urls_from_json(json_file):
|
||||
with open(json_file, encoding='utf-8') as file:
|
||||
data = json.load(file)
|
||||
@ -265,13 +438,43 @@ def clone_or_pull_git_repository(git_url):
|
||||
print(f"Failed to clone '{repo_name}': {e}")
|
||||
|
||||
|
||||
def update_custom_nodes():
|
||||
def update_custom_nodes(scan_only_mode=False, url_list_file=None):
|
||||
"""
|
||||
Update custom nodes by cloning/pulling repositories
|
||||
|
||||
Args:
|
||||
scan_only_mode (bool): If True, use URL list file instead of custom-node-list.json
|
||||
url_list_file (str): Path to URL list file (required if scan_only_mode=True)
|
||||
|
||||
Returns:
|
||||
dict: node_info mapping {repo_name: (url, title, preemptions, node_pattern)}
|
||||
"""
|
||||
if not os.path.exists(temp_dir):
|
||||
os.makedirs(temp_dir)
|
||||
|
||||
node_info = {}
|
||||
|
||||
git_url_titles_preemptions = get_git_urls_from_json('custom-node-list.json')
|
||||
# Select URL source based on mode
|
||||
if scan_only_mode:
|
||||
if not url_list_file:
|
||||
raise ValueError("url_list_file is required in scan-only mode")
|
||||
|
||||
git_url_titles_preemptions = get_urls_from_list_file(url_list_file)
|
||||
print("\n[Scan-Only Mode]")
|
||||
print(f" - URL source: {url_list_file}")
|
||||
print(" - GitHub stats: DISABLED")
|
||||
print(f" - Git clone/pull: {'ENABLED' if not skip_update else 'DISABLED'}")
|
||||
print(" - Metadata: EMPTY")
|
||||
else:
|
||||
if not os.path.exists('custom-node-list.json'):
|
||||
raise FileNotFoundError("custom-node-list.json not found")
|
||||
|
||||
git_url_titles_preemptions = get_git_urls_from_json('custom-node-list.json')
|
||||
print("\n[Standard Mode]")
|
||||
print(" - URL source: custom-node-list.json")
|
||||
print(f" - GitHub stats: {'ENABLED' if not skip_stat_update else 'DISABLED'}")
|
||||
print(f" - Git clone/pull: {'ENABLED' if not skip_update else 'DISABLED'}")
|
||||
print(" - Metadata: FULL")
|
||||
|
||||
def process_git_url_title(url, title, preemptions, node_pattern):
|
||||
name = os.path.basename(url)
|
||||
@ -383,46 +586,59 @@ def update_custom_nodes():
|
||||
if not skip_stat_update:
|
||||
process_git_stats(git_url_titles_preemptions)
|
||||
|
||||
# Git clone/pull for all repositories
|
||||
with concurrent.futures.ThreadPoolExecutor(11) as executor:
|
||||
for url, title, preemptions, node_pattern in git_url_titles_preemptions:
|
||||
executor.submit(process_git_url_title, url, title, preemptions, node_pattern)
|
||||
|
||||
py_url_titles_and_pattern = get_py_urls_from_json('custom-node-list.json')
|
||||
# .py file download (skip in scan-only mode - only process git repos)
|
||||
if not scan_only_mode:
|
||||
py_url_titles_and_pattern = get_py_urls_from_json('custom-node-list.json')
|
||||
|
||||
def download_and_store_info(url_title_preemptions_and_pattern):
|
||||
url, title, preemptions, node_pattern = url_title_preemptions_and_pattern
|
||||
name = os.path.basename(url)
|
||||
if name.endswith(".py"):
|
||||
node_info[name] = (url, title, preemptions, node_pattern)
|
||||
def download_and_store_info(url_title_preemptions_and_pattern):
|
||||
url, title, preemptions, node_pattern = url_title_preemptions_and_pattern
|
||||
name = os.path.basename(url)
|
||||
if name.endswith(".py"):
|
||||
node_info[name] = (url, title, preemptions, node_pattern)
|
||||
|
||||
try:
|
||||
download_url(url, temp_dir)
|
||||
except:
|
||||
print(f"[ERROR] Cannot download '{url}'")
|
||||
try:
|
||||
download_url(url, temp_dir)
|
||||
except:
|
||||
print(f"[ERROR] Cannot download '{url}'")
|
||||
|
||||
with concurrent.futures.ThreadPoolExecutor(10) as executor:
|
||||
executor.map(download_and_store_info, py_url_titles_and_pattern)
|
||||
with concurrent.futures.ThreadPoolExecutor(10) as executor:
|
||||
executor.map(download_and_store_info, py_url_titles_and_pattern)
|
||||
|
||||
return node_info
|
||||
|
||||
|
||||
def gen_json(node_info):
|
||||
def gen_json(node_info, scan_only_mode=False):
|
||||
"""
|
||||
Generate extension-node-map.json from scanned node information
|
||||
|
||||
Args:
|
||||
node_info (dict): Repository metadata mapping
|
||||
scan_only_mode (bool): If True, exclude metadata from output
|
||||
"""
|
||||
# scan from .py file
|
||||
node_files, node_dirs = get_nodes(temp_dir)
|
||||
|
||||
comfyui_path = os.path.abspath(os.path.join(temp_dir, "ComfyUI"))
|
||||
node_dirs.remove(comfyui_path)
|
||||
node_dirs = [comfyui_path] + node_dirs
|
||||
# Only reorder if ComfyUI exists in the list
|
||||
if comfyui_path in node_dirs:
|
||||
node_dirs.remove(comfyui_path)
|
||||
node_dirs = [comfyui_path] + node_dirs
|
||||
|
||||
data = {}
|
||||
for dirname in node_dirs:
|
||||
py_files = get_py_file_paths(dirname)
|
||||
metadata = {}
|
||||
|
||||
|
||||
nodes = set()
|
||||
for py in py_files:
|
||||
nodes_in_file, metadata_in_file = scan_in_file(py, dirname == "ComfyUI")
|
||||
nodes.update(nodes_in_file)
|
||||
# Include metadata from .py files in both modes
|
||||
metadata.update(metadata_in_file)
|
||||
|
||||
dirname = os.path.basename(dirname)
|
||||
@ -437,17 +653,28 @@ def gen_json(node_info):
|
||||
if dirname in node_info:
|
||||
git_url, title, preemptions, node_pattern = node_info[dirname]
|
||||
|
||||
metadata['title_aux'] = title
|
||||
# Conditionally add metadata based on mode
|
||||
if not scan_only_mode:
|
||||
# Standard mode: include all metadata
|
||||
metadata['title_aux'] = title
|
||||
|
||||
if preemptions is not None:
|
||||
metadata['preemptions'] = preemptions
|
||||
if preemptions is not None:
|
||||
metadata['preemptions'] = preemptions
|
||||
|
||||
if node_pattern is not None:
|
||||
metadata['nodename_pattern'] = node_pattern
|
||||
if node_pattern is not None:
|
||||
metadata['nodename_pattern'] = node_pattern
|
||||
# Scan-only mode: metadata remains empty
|
||||
|
||||
data[git_url] = (nodes, metadata)
|
||||
else:
|
||||
print(f"WARN: {dirname} is removed from custom-node-list.json")
|
||||
# Scan-only mode: Repository not in node_info (expected behavior)
|
||||
# Construct URL from dirname (author_repo format)
|
||||
if '_' in dirname:
|
||||
parts = dirname.split('_', 1)
|
||||
git_url = f"https://github.com/{parts[0]}/{parts[1]}"
|
||||
data[git_url] = (nodes, metadata)
|
||||
else:
|
||||
print(f"WARN: {dirname} is removed from custom-node-list.json")
|
||||
|
||||
for file in node_files:
|
||||
nodes, metadata = scan_in_file(file)
|
||||
@ -460,13 +687,16 @@ def gen_json(node_info):
|
||||
|
||||
if file in node_info:
|
||||
url, title, preemptions, node_pattern = node_info[file]
|
||||
metadata['title_aux'] = title
|
||||
|
||||
if preemptions is not None:
|
||||
metadata['preemptions'] = preemptions
|
||||
|
||||
if node_pattern is not None:
|
||||
metadata['nodename_pattern'] = node_pattern
|
||||
# Conditionally add metadata based on mode
|
||||
if not scan_only_mode:
|
||||
metadata['title_aux'] = title
|
||||
|
||||
if preemptions is not None:
|
||||
metadata['preemptions'] = preemptions
|
||||
|
||||
if node_pattern is not None:
|
||||
metadata['nodename_pattern'] = node_pattern
|
||||
|
||||
data[url] = (nodes, metadata)
|
||||
else:
|
||||
@ -478,6 +708,10 @@ def gen_json(node_info):
|
||||
for extension in extensions:
|
||||
node_list_json_path = os.path.join(temp_dir, extension, 'node_list.json')
|
||||
if os.path.exists(node_list_json_path):
|
||||
# Skip if extension not in node_info (scan-only mode with limited URLs)
|
||||
if extension not in node_info:
|
||||
continue
|
||||
|
||||
git_url, title, preemptions, node_pattern = node_info[extension]
|
||||
|
||||
with open(node_list_json_path, 'r', encoding='utf-8') as f:
|
||||
@ -507,14 +741,16 @@ def gen_json(node_info):
|
||||
print("------------------------------------------------------")
|
||||
node_list_json = {}
|
||||
|
||||
metadata_in_url['title_aux'] = title
|
||||
# Conditionally add metadata based on mode
|
||||
if not scan_only_mode:
|
||||
metadata_in_url['title_aux'] = title
|
||||
|
||||
if preemptions is not None:
|
||||
metadata['preemptions'] = preemptions
|
||||
if preemptions is not None:
|
||||
metadata_in_url['preemptions'] = preemptions
|
||||
|
||||
if node_pattern is not None:
|
||||
metadata_in_url['nodename_pattern'] = node_pattern
|
||||
|
||||
if node_pattern is not None:
|
||||
metadata_in_url['nodename_pattern'] = node_pattern
|
||||
|
||||
nodes = list(nodes)
|
||||
nodes.sort()
|
||||
data[git_url] = (nodes, metadata_in_url)
|
||||
@ -524,12 +760,53 @@ def gen_json(node_info):
|
||||
json.dump(data, file, indent=4, sort_keys=True)
|
||||
|
||||
|
||||
print("### ComfyUI Manager Node Scanner ###")
|
||||
if __name__ == "__main__":
|
||||
# Parse arguments
|
||||
args = parse_arguments()
|
||||
|
||||
print("\n# Updating extensions\n")
|
||||
updated_node_info = update_custom_nodes()
|
||||
# Determine mode
|
||||
scan_only_mode = args.scan_only is not None
|
||||
url_list_file = args.scan_only if scan_only_mode else None
|
||||
|
||||
print("\n# 'extension-node-map.json' file is generated.\n")
|
||||
gen_json(updated_node_info)
|
||||
# Determine temp_dir
|
||||
if args.temp_dir:
|
||||
temp_dir = args.temp_dir
|
||||
elif args.temp_dir_positional:
|
||||
temp_dir = args.temp_dir_positional
|
||||
else:
|
||||
temp_dir = os.path.join(os.getcwd(), ".tmp")
|
||||
|
||||
print("\nDONE.\n")
|
||||
if not os.path.exists(temp_dir):
|
||||
os.makedirs(temp_dir)
|
||||
|
||||
# Determine skip flags
|
||||
skip_update = args.skip_update or args.skip_all
|
||||
skip_stat_update = args.skip_stat_update or args.skip_all or scan_only_mode
|
||||
|
||||
if not skip_stat_update:
|
||||
auth = Auth.Token(os.environ.get('GITHUB_TOKEN'))
|
||||
g = Github(auth=auth)
|
||||
else:
|
||||
g = None
|
||||
|
||||
print("### ComfyUI Manager Node Scanner ###")
|
||||
|
||||
if scan_only_mode:
|
||||
print(f"\n# [Scan-Only Mode] Processing URL list: {url_list_file}\n")
|
||||
else:
|
||||
print("\n# [Standard Mode] Updating extensions\n")
|
||||
|
||||
# Update/clone repositories and collect node info
|
||||
updated_node_info = update_custom_nodes(scan_only_mode, url_list_file)
|
||||
|
||||
print("\n# Generating 'extension-node-map.json'...\n")
|
||||
|
||||
# Generate extension-node-map.json
|
||||
gen_json(updated_node_info, scan_only_mode)
|
||||
|
||||
print("\n✅ DONE.\n")
|
||||
|
||||
if scan_only_mode:
|
||||
print("Output: extension-node-map.json (node mappings only)")
|
||||
else:
|
||||
print("Output: extension-node-map.json (full metadata)")
|
||||
Loading…
Reference in New Issue
Block a user