mirror of
https://github.com/Comfy-Org/ComfyUI-Manager.git
synced 2026-01-21 11:30:14 +08:00
Compare commits
14 Commits
307eadccaf
...
fb773837c8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fb773837c8 | ||
|
|
f4fdd51ce9 | ||
|
|
ae6c7dd673 | ||
|
|
0cbc773126 | ||
|
|
45bd3473fa | ||
|
|
02175844da | ||
|
|
1a56124af3 | ||
|
|
f7d56e62b9 | ||
|
|
f011bf5172 | ||
|
|
3c9c3196a1 | ||
|
|
8f0d16a7d8 | ||
|
|
ed1b1a446b | ||
|
|
3d0c41e1bc | ||
|
|
0979084230 |
@ -5211,6 +5211,16 @@
|
||||
"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",
|
||||
@ -8830,6 +8840,16 @@
|
||||
"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",
|
||||
@ -18015,6 +18035,26 @@
|
||||
"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",
|
||||
@ -29641,17 +29681,6 @@
|
||||
"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",
|
||||
@ -32165,16 +32194,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI-SoulX-Podcast is a custom node plugin for ComfyUI that packages the core functionality of SoulX-Podcast (long-form, multi-speaker, multi-dialect podcast voice generation) into a visual node workflow."
|
||||
},
|
||||
{
|
||||
"author": "flybirdxx",
|
||||
"title": "ComfyUI-Prompt_Helper",
|
||||
"reference": "https://github.com/flybirdxx/ComfyUI-Prompt_Helper",
|
||||
"files": [
|
||||
"https://github.com/flybirdxx/ComfyUI-Prompt_Helper"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI node that loads Qwen3-4B locally and expands short prompts into detailed, image-generation-friendly descriptions via GGUF. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "DenRakEiw",
|
||||
"title": "ComfyUI Latent Color Tools",
|
||||
@ -33796,6 +33815,16 @@
|
||||
"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",
|
||||
@ -35300,6 +35329,16 @@
|
||||
"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",
|
||||
@ -36278,6 +36317,16 @@
|
||||
"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",
|
||||
@ -38740,6 +38789,16 @@
|
||||
"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",
|
||||
@ -38890,10 +38949,76 @@
|
||||
"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."
|
||||
},
|
||||
|
||||
|
||||
|
||||
@ -39298,6 +39423,17 @@
|
||||
],
|
||||
"install_type": "unzip",
|
||||
"description": "This is a node to convert an image into a CMYK Halftone dot image."
|
||||
},
|
||||
{
|
||||
"author": "leoleexh",
|
||||
"title": "comfyui-deploy-leolee",
|
||||
"id": "leoleexh's Custom-Nodes",
|
||||
"reference": "https://github.com/leoleelxh/comfyui-deploy-leolee",
|
||||
"files": [
|
||||
"https://github.com/leoleelxh/comfyui-deploy-leolee"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "comfyui-deploy is a customized version by leolee, and it serves as the supporting plugin for the Figma plugin: ComfyUI-Image-Generator-Advance."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@ -18,14 +18,6 @@
|
||||
"title_aux": "mmaker/Color Enhance"
|
||||
}
|
||||
],
|
||||
"https://gitee.com/yyh915/jkha-load-img": [
|
||||
[
|
||||
"JkhaLoadImage"
|
||||
],
|
||||
{
|
||||
"title_aux": "ImageLoadFromLocalOrUrl Node for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/0x-jerry/comfyui-rembg": [
|
||||
[
|
||||
"Load Rembg Model",
|
||||
@ -6128,17 +6120,21 @@
|
||||
],
|
||||
"https://github.com/DragonDiffusionbyBoyo/Boyonodes": [
|
||||
[
|
||||
"BoyoApplyIPAdapterZImage",
|
||||
"BoyoAssetGrabberAdvanced",
|
||||
"BoyoAssetGrabberSimple",
|
||||
"BoyoAudioEval",
|
||||
"BoyoChainBastardLoops",
|
||||
"BoyoCompare",
|
||||
"BoyoExecutionBarrier",
|
||||
"BoyoForLoopEnd",
|
||||
"BoyoForLoopStart",
|
||||
"BoyoFramePackLoRA",
|
||||
"BoyoIPAdapterZImageLoader",
|
||||
"BoyoImageCrop",
|
||||
"BoyoImageGrab",
|
||||
"BoyoIncontextSaver",
|
||||
"BoyoLatentPassthrough",
|
||||
"BoyoLoRAConfigInspector",
|
||||
"BoyoLoRAConfigProcessor",
|
||||
"BoyoLoRAJSONBuilder",
|
||||
@ -6155,6 +6151,7 @@
|
||||
"BoyoPromptInjector",
|
||||
"BoyoPromptLoop",
|
||||
"BoyoQwenVLGrounding",
|
||||
"BoyoResolutionCalc",
|
||||
"BoyoSaver",
|
||||
"BoyoStoryboardOutput",
|
||||
"BoyoStoryboardPrompt",
|
||||
@ -6696,10 +6693,15 @@
|
||||
"https://github.com/EricRollei/Emu35-Comfyui-Nodes": [
|
||||
[
|
||||
"Emu35ClearCache",
|
||||
"Emu35InterleavedGenerator",
|
||||
"Emu35Loader",
|
||||
"Emu35LoaderV2",
|
||||
"Emu35MemoryManager",
|
||||
"Emu35OfficialT2I",
|
||||
"Emu35Sampler",
|
||||
"Emu35VQA"
|
||||
"Emu35T2ISamplerV2",
|
||||
"Emu35VQA",
|
||||
"Emu35X2ISampler"
|
||||
],
|
||||
{
|
||||
"title_aux": "Emu35-Comfyui-Nodes"
|
||||
@ -7052,6 +7054,14 @@
|
||||
"title_aux": "MultiModel"
|
||||
}
|
||||
],
|
||||
"https://github.com/Faildes/ComfyUI-NegativeFold": [
|
||||
[
|
||||
"FoldNegativeIntoPositiveConditioning"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-NegativeFold"
|
||||
}
|
||||
],
|
||||
"https://github.com/Fannovel16/ComfyUI-Frame-Interpolation": [
|
||||
[
|
||||
"AMT VFI",
|
||||
@ -8114,6 +8124,26 @@
|
||||
"title_aux": "ComfyUI-DiffusersImageOutpaint"
|
||||
}
|
||||
],
|
||||
"https://github.com/GiusTex/ComfyUI-MoreEfficientSamplers": [
|
||||
[
|
||||
"SamplerCustomAdvanced_Efficient",
|
||||
"SamplerCustomUltraAdvancedEfficient"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-MoreEfficientSamplers"
|
||||
}
|
||||
],
|
||||
"https://github.com/GiusTex/ComfyUI-Wan-TimeToMove": [
|
||||
[
|
||||
"AddTTMLatent",
|
||||
"TTMKSamplerSelect",
|
||||
"WanVideoEncode",
|
||||
"WanVideoSamplerCustomUltraAdvancedEfficient"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Wan-TimeToMove"
|
||||
}
|
||||
],
|
||||
"https://github.com/GizmoR13/PG-Nodes": [
|
||||
[
|
||||
"PgCheckpointSelect",
|
||||
@ -10128,17 +10158,19 @@
|
||||
"JNodes_AudioInputOptions",
|
||||
"JNodes_BooleanSelectorWithString",
|
||||
"JNodes_BreakMediaInfo",
|
||||
"JNodes_CacheGlobalParameters",
|
||||
"JNodes_CheckpointSelectorWithString",
|
||||
"JNodes_ConditioningInOut",
|
||||
"JNodes_CreateStereoscopicImageFromDepth",
|
||||
"JNodes_DiffusionModelSelector",
|
||||
"JNodes_EmptyCudaCache",
|
||||
"JNodes_FloatLiteral",
|
||||
"JNodes_GetCleanFilename",
|
||||
"JNodes_GetComfyDirectory",
|
||||
"JNodes_GetLeafDirectory",
|
||||
"JNodes_GetOutputDirectory",
|
||||
"JNodes_GetParameterFromList",
|
||||
"JNodes_GetParameterGlobal",
|
||||
"JNodes_GetParameterFromTable",
|
||||
"JNodes_GetTempDirectory",
|
||||
"JNodes_ImageFormatSelector",
|
||||
"JNodes_ImageSizeSelector",
|
||||
@ -10149,11 +10181,11 @@
|
||||
"JNodes_LoadVisualMediaFromPath_Batch",
|
||||
"JNodes_LoadVisualMediaFromPath_List",
|
||||
"JNodes_LoraExtractor",
|
||||
"JNodes_MakeParameterTable",
|
||||
"JNodes_MediaInfoToString",
|
||||
"JNodes_ModelInOut",
|
||||
"JNodes_OutVideoInfo",
|
||||
"JNodes_ParseDynamicPrompts",
|
||||
"JNodes_ParseParametersToGlobalList",
|
||||
"JNodes_ParseWildcards",
|
||||
"JNodes_PromptBuilderSingleSubject",
|
||||
"JNodes_RemoveCommentedText",
|
||||
@ -11351,6 +11383,7 @@
|
||||
"https://github.com/Lakonik/ComfyUI-piFlow": [
|
||||
[
|
||||
"Load pi-Flow Model",
|
||||
"Load pi-Flow Model (GGUF)",
|
||||
"ModelSamplingPiFlow",
|
||||
"pi-Flow Sampler"
|
||||
],
|
||||
@ -11846,6 +11879,7 @@
|
||||
"ImageMetadataSaver",
|
||||
"LMMExtractPromptsNode",
|
||||
"LatentSettings",
|
||||
"Loraloadertotext",
|
||||
"PipeHub",
|
||||
"PreviewMask",
|
||||
"UniversalLatentSettings",
|
||||
@ -12812,7 +12846,10 @@
|
||||
"BypassControl",
|
||||
"CLIPTextEncodePromptEnrichment",
|
||||
"CameraAngleControl",
|
||||
"DetailEnhanceSamplerNode",
|
||||
"DetailEnhanceSigmasNode",
|
||||
"DisplayText",
|
||||
"ImageResolutionExtractorNode",
|
||||
"ImageResolutionFitNode",
|
||||
"MultiplicationNode",
|
||||
"PromptQueue",
|
||||
@ -12820,6 +12857,8 @@
|
||||
"ResolutionSelectNode",
|
||||
"TileCompositor",
|
||||
"TileManager",
|
||||
"UltimateDetailSamplerNode",
|
||||
"UltimateDetailSigmasNode",
|
||||
"VRAMRAMCleanerNode",
|
||||
"VisualMarqueeSelection"
|
||||
],
|
||||
@ -14850,6 +14889,15 @@
|
||||
"title_aux": "ComfyUI-SAM3DBody"
|
||||
}
|
||||
],
|
||||
"https://github.com/PozzettiAndrea/ComfyUI-Sharp": [
|
||||
[
|
||||
"LoadSharpModel",
|
||||
"SharpPredict"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Sharp"
|
||||
}
|
||||
],
|
||||
"https://github.com/PressWagon/ComfyUI-StringsAndThings": [
|
||||
[
|
||||
"DebugString",
|
||||
@ -14998,6 +15046,15 @@
|
||||
"title_aux": "comfyui-qbug-batch"
|
||||
}
|
||||
],
|
||||
"https://github.com/QL-boy/ComfyUI-Advanced-Tile-Processing": [
|
||||
[
|
||||
"CustomTileMerger",
|
||||
"CustomTileSplitter"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Advanced-Tile-Processing"
|
||||
}
|
||||
],
|
||||
"https://github.com/QaisMalkawi/ComfyUI-QaisHelper": [
|
||||
[
|
||||
"Bool Binary Operation",
|
||||
@ -15981,7 +16038,6 @@
|
||||
],
|
||||
"https://github.com/SatadalAI/SATA_UtilityNode": [
|
||||
[
|
||||
"ImageSaveWithMetadata",
|
||||
"Latent Machine",
|
||||
"Latent_Machine",
|
||||
"Prompt Autocomplete",
|
||||
@ -15990,7 +16046,8 @@
|
||||
"Prompt_Machine",
|
||||
"Resolution Machine",
|
||||
"Resolution_Machine",
|
||||
"Save Image w/Metadata",
|
||||
"Save Machine",
|
||||
"Save_Machine",
|
||||
"Upscale Machine",
|
||||
"Upscale_Machine"
|
||||
],
|
||||
@ -19669,7 +19726,8 @@
|
||||
"WASMoEConditioningListAppend",
|
||||
"WASSaveLUT",
|
||||
"WASTiledImageUpscaleWithModel",
|
||||
"WASWan22MoESamplerCtx"
|
||||
"WASWan22MoESamplerCtx",
|
||||
"WASWanExposureStabilizer"
|
||||
],
|
||||
{
|
||||
"title_aux": "WAS_Extras"
|
||||
@ -20175,6 +20233,16 @@
|
||||
"title_aux": "ComfyUI-MIKKY-Mask-Editor"
|
||||
}
|
||||
],
|
||||
"https://github.com/XYMikky12138/ComfyUI-NanoBanana-inpaint": [
|
||||
[
|
||||
"BananaImageResizeFit",
|
||||
"BananaSmartCrop",
|
||||
"BananaUncropPaste"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-NanoBanana-inpaint"
|
||||
}
|
||||
],
|
||||
"https://github.com/XchanBik/ComfyUI_SimpleBridgeNode": [
|
||||
[
|
||||
"LoraTextLoader",
|
||||
@ -21938,7 +22006,6 @@
|
||||
"https://github.com/ainewsto/Comfyui_Comfly_v2": [
|
||||
[
|
||||
"ComflyChatGPTApi",
|
||||
"ComflyGeminiTextOnly",
|
||||
"ComflyGoogelVeo3",
|
||||
"ComflyJimengApi",
|
||||
"ComflyJimengVideoApi",
|
||||
@ -21958,9 +22025,10 @@
|
||||
"Comfly_Mj_swap_face",
|
||||
"Comfly_Mju",
|
||||
"Comfly_Mjv",
|
||||
"Comfly_Z_image_turbo",
|
||||
"Comfly_api_set",
|
||||
"Comfly_gpt_image_1",
|
||||
"Comfly_gpt_image_1_edit",
|
||||
"Comfly_gpt_image",
|
||||
"Comfly_gpt_image_edit",
|
||||
"Comfly_kling_image2video",
|
||||
"Comfly_kling_multi_image2video",
|
||||
"Comfly_kling_text2video",
|
||||
@ -22197,6 +22265,7 @@
|
||||
],
|
||||
"https://github.com/akawana/ComfyUI-RGBYP-Mask-Editor": [
|
||||
[
|
||||
"MaskGrowBlur",
|
||||
"RGBYPLoadImage",
|
||||
"RGBYPMaskBridge",
|
||||
"RGBYPMaskCompositeWithStrength",
|
||||
@ -22211,6 +22280,9 @@
|
||||
],
|
||||
"https://github.com/akawana/ComfyUI-Utils-extra": [
|
||||
[
|
||||
"AK Base",
|
||||
"AK Base Settings",
|
||||
"AK Base Settings Out",
|
||||
"AKSamplerSettings",
|
||||
"AKSettingsOut",
|
||||
"CLIPEncodeMultiple",
|
||||
@ -22568,6 +22640,7 @@
|
||||
],
|
||||
"https://github.com/alexopus/ComfyUI-Image-Saver": [
|
||||
[
|
||||
"Any to String (Image Saver)",
|
||||
"Cfg Literal (Image Saver)",
|
||||
"Checkpoint Loader with Name (Image Saver)",
|
||||
"Civitai Hash Fetcher (Image Saver)",
|
||||
@ -22578,18 +22651,11 @@
|
||||
"Image Saver Simple",
|
||||
"Input Parameters (Image Saver)",
|
||||
"Int Literal (Image Saver)",
|
||||
"Sampler Selector (Image Saver)",
|
||||
"SamplerToString (Image Saver)",
|
||||
"Scheduler Selector (Eff.) (Image Saver)",
|
||||
"Scheduler Selector (Image Saver)",
|
||||
"Scheduler Selector (inspire) (Image Saver)",
|
||||
"SchedulerEfficiencyToString (Image Saver)",
|
||||
"SchedulerInspireToString (Image Saver)",
|
||||
"SchedulerToString (Image Saver)",
|
||||
"Seed Generator (Image Saver)",
|
||||
"String Literal (Image Saver)",
|
||||
"UNet loader with Name (Image Saver)",
|
||||
"Width/Height Literal (Image Saver)"
|
||||
"Width/Height Literal (Image Saver)",
|
||||
"Workflow Input Value (Image Saver)"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI Image Saver"
|
||||
@ -22778,6 +22844,7 @@
|
||||
"ArchAi3D_Color_Correction_BT709",
|
||||
"ArchAi3D_Conditioning_Balance",
|
||||
"ArchAi3D_Dependency_Installer",
|
||||
"ArchAi3D_DiffSynth_ControlNet",
|
||||
"ArchAi3D_Empty_Latent_Batch",
|
||||
"ArchAi3D_Float_Input",
|
||||
"ArchAi3D_GDrive_Download",
|
||||
@ -22816,6 +22883,8 @@
|
||||
"ArchAi3D_Qwen_Exterior_Navigation",
|
||||
"ArchAi3D_Qwen_Exterior_View_Control",
|
||||
"ArchAi3D_Qwen_Image_Scale",
|
||||
"ArchAi3D_Qwen_Image_Scale_V2",
|
||||
"ArchAi3D_Qwen_Image_Stitch",
|
||||
"ArchAi3D_Qwen_Interior_Focus",
|
||||
"ArchAi3D_Qwen_Interior_Navigation",
|
||||
"ArchAi3D_Qwen_Interior_View_Control",
|
||||
@ -22840,8 +22909,19 @@
|
||||
"ArchAi3D_SEGS_Mask_Irregularity",
|
||||
"ArchAi3D_SEGS_To_Bundle",
|
||||
"ArchAi3D_Save_Image",
|
||||
"ArchAi3D_Simple_Blend_Mask",
|
||||
"ArchAi3D_Simple_Blend_Mask_Batch",
|
||||
"ArchAi3D_Simple_Edge_Mask",
|
||||
"ArchAi3D_Simple_Position_Prompt",
|
||||
"ArchAi3D_Simple_Tile_Compositor",
|
||||
"ArchAi3D_Simple_Tile_Compositor_Single",
|
||||
"ArchAi3D_Simple_Tile_Cropper",
|
||||
"ArchAi3D_Simple_Tile_Cropper_Batch",
|
||||
"ArchAi3D_Simple_Tile_Sampler",
|
||||
"ArchAi3D_Smart_Tile_Calculator",
|
||||
"ArchAi3D_Smart_Tile_Calculator_V3",
|
||||
"ArchAi3D_Smart_Tile_Calculator_V4",
|
||||
"ArchAi3D_Smart_Tile_Calculator_V5",
|
||||
"ArchAi3D_Smart_Tile_Conditioning",
|
||||
"ArchAi3D_Smart_Tile_Detailer",
|
||||
"ArchAi3D_Smart_Tile_Merger",
|
||||
@ -22850,11 +22930,29 @@
|
||||
"ArchAi3D_Smart_Tile_SEGS",
|
||||
"ArchAi3D_Smart_Tile_SEGS_Blur",
|
||||
"ArchAi3D_Smart_Tile_Sampler",
|
||||
"ArchAi3D_Smart_Tile_Solver_V6",
|
||||
"ArchAi3D_Smart_Tile_Solver_V6_2",
|
||||
"ArchAi3D_Smart_USDU_DiffDiff_ControlNet",
|
||||
"ArchAi3D_Smart_USDU_DiffDiff_ControlNet_CustomSample",
|
||||
"ArchAi3D_Smart_USDU_DiffDiff_ControlNet_NoUpscale",
|
||||
"ArchAi3D_Smart_USDU_DiffDiffusion",
|
||||
"ArchAi3D_Smart_USDU_DiffDiffusion_CustomSample",
|
||||
"ArchAi3D_Smart_USDU_DiffDiffusion_NoUpscale",
|
||||
"ArchAi3D_Smart_USDU_Mask_Denoise",
|
||||
"ArchAi3D_Smart_USDU_Split_Latent",
|
||||
"ArchAi3D_Smart_USDU_Universal",
|
||||
"ArchAi3D_Smart_USDU_Universal_CustomSample",
|
||||
"ArchAi3D_Smart_USDU_Universal_NoUpscale",
|
||||
"ArchAi3D_Smart_USDU_Universal_NoUpscale_V2",
|
||||
"ArchAi3D_Smart_USDU_Universal_NoUpscale_V3",
|
||||
"ArchAi3D_Smart_USDU_Universal_NoUpscale_V3_Standalone",
|
||||
"ArchAi3D_Smart_USDU_V3_Standalone",
|
||||
"ArchAi3D_Smart_Ultimate_SD_Upscale",
|
||||
"ArchAi3D_Smart_Ultimate_SD_Upscale_CustomSample",
|
||||
"ArchAi3D_Smart_Ultimate_SD_Upscale_NoUpscale",
|
||||
"ArchAi3D_Solid_Color_Image",
|
||||
"ArchAi3D_String_Input",
|
||||
"ArchAi3D_USDU_EdgeRepair",
|
||||
"ArchAi3dQwenEncoderSimpleV2"
|
||||
],
|
||||
{
|
||||
@ -23211,6 +23309,14 @@
|
||||
"title_aux": "ComfyUI Prompt History Node"
|
||||
}
|
||||
],
|
||||
"https://github.com/aria1th/ComfyUI-Wildcards-rework": [
|
||||
[
|
||||
"TextWildcards"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Wildcards-rework"
|
||||
}
|
||||
],
|
||||
"https://github.com/arthurtravers/ComfyUI-VideoOutputBridge": [
|
||||
[
|
||||
"VideoOutputBridge"
|
||||
@ -23336,6 +23442,14 @@
|
||||
"title_aux": "comfyui-find-perfect-resolution"
|
||||
}
|
||||
],
|
||||
"https://github.com/aslanxie/comfyui_qwen_image_edit": [
|
||||
[
|
||||
"QWen Image Edit"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui_qwen_image_edit"
|
||||
}
|
||||
],
|
||||
"https://github.com/asutermo/ComfyUI-Flux-TryOff": [
|
||||
[
|
||||
"TryOffFluxFillModelNode",
|
||||
@ -26519,6 +26633,7 @@
|
||||
"IndexTTS2EmotionAudioNode",
|
||||
"IndexTTS2EmotionTextNode",
|
||||
"IndexTTS2EmotionVectorNode",
|
||||
"IndexTTS2ProNode",
|
||||
"IndexTTSNode",
|
||||
"IndexTTSProNode",
|
||||
"NovelTextStructureNode",
|
||||
@ -27446,11 +27561,19 @@
|
||||
],
|
||||
"https://github.com/ckinpdx/ComfyUI-SCAIL-AudioReactive": [
|
||||
[
|
||||
"SCAILAISTBeatDance",
|
||||
"SCAILAISTChunkPreview",
|
||||
"SCAILAISTFullLoader",
|
||||
"SCAILAISTFullSequence",
|
||||
"SCAILAISTLibraryLoader",
|
||||
"SCAILAlignPoseToReference",
|
||||
"SCAILAudioFeatureExtractor",
|
||||
"SCAILBasePoseGenerator",
|
||||
"SCAILBeatDetector",
|
||||
"SCAILBeatDrivenPose",
|
||||
"SCAILCMULibraryLoader",
|
||||
"SCAILCMUMotion",
|
||||
"SCAILCMUSequenceToSCAILPose",
|
||||
"SCAILPoseFromDWPose",
|
||||
"SCAILPoseRenderer"
|
||||
],
|
||||
@ -28076,6 +28199,7 @@
|
||||
"ReplaceVideoLatentFrames",
|
||||
"RescaleCFG",
|
||||
"ResizeAndPadImage",
|
||||
"ResolutionBucket",
|
||||
"Rodin3D_Detail",
|
||||
"Rodin3D_Gen2",
|
||||
"Rodin3D_Regular",
|
||||
@ -29144,6 +29268,15 @@
|
||||
"title_aux": "ComfyUI-TTS"
|
||||
}
|
||||
],
|
||||
"https://github.com/danieljanata/ComfyUI-QwenVL-Override": [
|
||||
[
|
||||
"AILab_QwenVL_Override",
|
||||
"AILab_QwenVL_Override_Advanced"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-QwenVL-Override"
|
||||
}
|
||||
],
|
||||
"https://github.com/darkamenosa/comfy_inpaint_blend": [
|
||||
[
|
||||
"EnhancedImageCompositeMasked"
|
||||
@ -30219,6 +30352,12 @@
|
||||
"ClaudeTokenCounter",
|
||||
"ClaudeUsageStats",
|
||||
"ClaudeVisionAnalysis",
|
||||
"ERPK Remove Background (BiRefNet)",
|
||||
"ERPK Remove Background (InSPyReNet)",
|
||||
"ERPK Remove Background (rembg)",
|
||||
"ERPK SHARP Predict",
|
||||
"ERPK SHARP Render Video",
|
||||
"ERPK SHARP Render Views",
|
||||
"GeminiAPIConfig",
|
||||
"GeminiChat",
|
||||
"GeminiImageEdit",
|
||||
@ -31611,14 +31750,6 @@
|
||||
"title_aux": "ComfyUI-hvBlockswap"
|
||||
}
|
||||
],
|
||||
"https://github.com/flybirdxx/ComfyUI-Prompt_Helper": [
|
||||
[
|
||||
"QwenImageEngineer"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Prompt_Helper"
|
||||
}
|
||||
],
|
||||
"https://github.com/flybirdxx/ComfyUI-RexOmni": [
|
||||
[
|
||||
"RexOmniDetector",
|
||||
@ -32111,6 +32242,18 @@
|
||||
"title_aux": "comfyui-customselector"
|
||||
}
|
||||
],
|
||||
"https://github.com/gateway/ComfyUI-Kie-API": [
|
||||
[
|
||||
"KIE_GetRemainingCredits",
|
||||
"KIE_NanoBananaPro_Image",
|
||||
"KIE_Seedream45_Edit",
|
||||
"KIE_Seedream45_TextToImage",
|
||||
"SteveHelloNode"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Kie-API"
|
||||
}
|
||||
],
|
||||
"https://github.com/gelasdev/ComfyUI-FLUX-BFL-API": [
|
||||
[
|
||||
"FluxConfig_BFL",
|
||||
@ -32179,7 +32322,7 @@
|
||||
"FormattedString",
|
||||
"JSONOutputList",
|
||||
"KSamplerImmediateSave",
|
||||
"LoadFile",
|
||||
"LoadAnyFile",
|
||||
"NumberOutputList",
|
||||
"SpreadsheetOutputList",
|
||||
"StringOutputList",
|
||||
@ -34022,10 +34165,10 @@
|
||||
"sort_list_string",
|
||||
"steg_alpha_embed",
|
||||
"steg_alpha_extract",
|
||||
"steg_rgb_embed",
|
||||
"steg_rgb_extract",
|
||||
"string_clear_if_contains",
|
||||
"video_audio_concat",
|
||||
"video_dir_combiner",
|
||||
"video_dir_combiner_ultra",
|
||||
"video_mute_from_url",
|
||||
"video_scene_splitter"
|
||||
@ -34660,10 +34803,13 @@
|
||||
],
|
||||
"https://github.com/illuminatianon/comfyui-lumi-tools": [
|
||||
[
|
||||
"LumiLLMPromptProcessor",
|
||||
"LumiOpenRouterProvider",
|
||||
"LumiSeed",
|
||||
"LumiShowText",
|
||||
"LumiShufflePrompt",
|
||||
"LumiWildcardProcessor"
|
||||
"LumiWildcardProcessor",
|
||||
"LumiWrapText"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-lumi-tools"
|
||||
@ -37454,6 +37600,7 @@
|
||||
"HuMoEmbeds",
|
||||
"LandmarksToImage",
|
||||
"LoadLynxResampler",
|
||||
"LoadNLFModel",
|
||||
"LoadVQVAE",
|
||||
"LoadWanVideoClipTextEncoder",
|
||||
"LoadWanVideoT5TextEncoder",
|
||||
@ -38293,6 +38440,15 @@
|
||||
"title_aux": "Google Photos Loader - by PabloGFX"
|
||||
}
|
||||
],
|
||||
"https://github.com/lazyq666/gemini-3-simply-comfyui": [
|
||||
[
|
||||
"Gemini3ProImagePreview",
|
||||
"Gemini3ProPreviewText"
|
||||
],
|
||||
{
|
||||
"title_aux": "gemini-3-simply-comfyui"
|
||||
}
|
||||
],
|
||||
"https://github.com/lc03lc/Comfyui_OmniConsistency": [
|
||||
[
|
||||
"Comfyui_OmniConsistency"
|
||||
@ -43127,6 +43283,15 @@
|
||||
"title_aux": "ComfyUI-WhisperXX"
|
||||
}
|
||||
],
|
||||
"https://github.com/okdalto/ComfyUI-PersonaLive": [
|
||||
[
|
||||
"PersonaLiveCheckpointLoader",
|
||||
"PersonaLivePhotoSampler"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-PersonaLive"
|
||||
}
|
||||
],
|
||||
"https://github.com/okdalto/ComfyUI-WithAnyone": [
|
||||
[
|
||||
"WithAnyoneArcFaceExtractorNode",
|
||||
@ -44789,7 +44954,9 @@
|
||||
"PVL_Google_NanoBanana_API_mandatory_IMG",
|
||||
"PVL_Google_NanoBanana_Multi_API",
|
||||
"PVL_Google_NanoBanana_PRO_Multi_API",
|
||||
"PVL_ImageBatchToImageList",
|
||||
"PVL_ImageComposite",
|
||||
"PVL_ImageListToImageBatch",
|
||||
"PVL_ImageResize",
|
||||
"PVL_ImageStitch",
|
||||
"PVL_Image_Translation_Offset",
|
||||
@ -45177,6 +45344,71 @@
|
||||
"title_aux": "Mflux-ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/razvanmatei-sf/comfyui-stillfront": [
|
||||
[
|
||||
"SFLLMChat",
|
||||
"SFPromptList",
|
||||
"SFQwenResolution",
|
||||
"SFVertexAIImagen3TextToImage",
|
||||
"SFVertexAIImagen4TextToImage",
|
||||
"SFVertexAIImagen4Upscale",
|
||||
"SFVertexAINanaBananaPro",
|
||||
"SFVertexAINanaBananaProEdit",
|
||||
"SFVertexAIVeo31ImageToVideo",
|
||||
"SFVertexAIVeo31TextToVideo",
|
||||
"SFWaveSpeedClient",
|
||||
"SFWaveSpeedFluxControlNetUnionPro2",
|
||||
"SFWaveSpeedFluxKontextDev",
|
||||
"SFWaveSpeedFluxKontextMax",
|
||||
"SFWaveSpeedFluxKontextPro",
|
||||
"SFWaveSpeedImageUpscaler",
|
||||
"SFWaveSpeedInfiniteTalk",
|
||||
"SFWaveSpeedInfiniteTalkMulti",
|
||||
"SFWaveSpeedNanoBananaEdit",
|
||||
"SFWaveSpeedNanoBananaProEdit",
|
||||
"SFWaveSpeedNanoBananaProEditMulti",
|
||||
"SFWaveSpeedNanoBananaProEditUltra",
|
||||
"SFWaveSpeedNanoBananaProTextToImage",
|
||||
"SFWaveSpeedNanoBananaProTextToImageMulti",
|
||||
"SFWaveSpeedNanoBananaProTextToImageUltra",
|
||||
"SFWaveSpeedNanoBananaTextToImage",
|
||||
"SFWaveSpeedQwenEdit",
|
||||
"SFWaveSpeedQwenEditLora",
|
||||
"SFWaveSpeedQwenEditPlus",
|
||||
"SFWaveSpeedQwenEditPlusLora",
|
||||
"SFWaveSpeedQwenTextToImage",
|
||||
"SFWaveSpeedQwenTextToImageLora",
|
||||
"SFWaveSpeedRunwayUpscale",
|
||||
"SFWaveSpeedSeedreamV4",
|
||||
"SFWaveSpeedSeedreamV4Edit",
|
||||
"SFWaveSpeedSeedreamV4EditSequential",
|
||||
"SFWaveSpeedSeedreamV4Sequential",
|
||||
"SFWaveSpeedSora2ImageToVideo",
|
||||
"SFWaveSpeedSora2ImageToVideoPro",
|
||||
"SFWaveSpeedSora2TextToVideo",
|
||||
"SFWaveSpeedSora2TextToVideoPro",
|
||||
"SFWaveSpeedVeo31FastImageToVideo",
|
||||
"SFWaveSpeedVeo31FastTextToVideo",
|
||||
"SFWaveSpeedVeo31ImageToVideo",
|
||||
"SFWaveSpeedVeo31ReferenceToVideo",
|
||||
"SFWaveSpeedVeo31TextToVideo",
|
||||
"SFWaveSpeedWan22Animate",
|
||||
"SFWaveSpeedWan22I2V720p",
|
||||
"SFWaveSpeedWan25ImageEdit",
|
||||
"SFWaveSpeedWan25ImageToVideo",
|
||||
"SFWaveSpeedWan25ImageToVideoFast",
|
||||
"SFWaveSpeedWan25TextToImage",
|
||||
"SFWaveSpeedWan25TextToVideo",
|
||||
"SFWaveSpeedWan25TextToVideoFast",
|
||||
"WaveSpeedAI Qwen Image Text to Image",
|
||||
"WaveSpeedAI Qwen Image Text to Image LoRA",
|
||||
"WaveSpeedAI_RunwaymlUpscaleV1Node",
|
||||
"WaveSpeedAI_Wan22I2V720pNode"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-stillfront"
|
||||
}
|
||||
],
|
||||
"https://github.com/razvanmatei-sf/razv-llm": [
|
||||
[
|
||||
"RazvLLMChat"
|
||||
@ -49653,10 +49885,12 @@
|
||||
"FullPipeIn",
|
||||
"FullPipeLoader",
|
||||
"FullPipeOut",
|
||||
"LoaderFullPipe",
|
||||
"ModelPresetNode",
|
||||
"MultiStringConditioning",
|
||||
"PromptConditioningNode",
|
||||
"ResolutionSelector",
|
||||
"SaveFullPipe",
|
||||
"SeedWithOverride",
|
||||
"StylePresetNode",
|
||||
"TagReplacementNode",
|
||||
@ -49797,6 +50031,7 @@
|
||||
"TALoadDiffusionModelWithName",
|
||||
"TALoadGGUFModelWithName",
|
||||
"TAPromptController",
|
||||
"TASaveImageWithPrompt",
|
||||
"ta_captioning"
|
||||
],
|
||||
{
|
||||
@ -49907,6 +50142,7 @@
|
||||
],
|
||||
"https://github.com/tppp2806/ComfyUI-YoloTrack": [
|
||||
[
|
||||
"MaskCropExtractNode",
|
||||
"YOLODetectionNode",
|
||||
"YOLOTrackingNode"
|
||||
],
|
||||
@ -50205,7 +50441,9 @@
|
||||
"DyPEQwenImage",
|
||||
"FlowMatchingProgressiveUpscaler",
|
||||
"FlowMatchingStage",
|
||||
"LatentChannelStatsPreview"
|
||||
"ImageMeshDrag",
|
||||
"LatentChannelStatsPreview",
|
||||
"LatentMeshDrag"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-FlowMatching-Upscaler"
|
||||
@ -50967,6 +51205,8 @@
|
||||
"VRGDG_MusicVideoPromptCreatorV3",
|
||||
"VRGDG_PostRunIndexStepper",
|
||||
"VRGDG_PromptSplitter",
|
||||
"VRGDG_PromptSplitter4",
|
||||
"VRGDG_PromptSplitterForFMML",
|
||||
"VRGDG_PromptSplitterForManual",
|
||||
"VRGDG_PromptSplitterJson",
|
||||
"VRGDG_PromptSplitterV2",
|
||||
@ -52656,6 +52896,7 @@
|
||||
"YC_ShowText",
|
||||
"ycBBoxBridge",
|
||||
"ycCanvasBBox",
|
||||
"ycCanvasBBoxMask",
|
||||
"ycimagebrushmask"
|
||||
],
|
||||
{
|
||||
|
||||
15896
github-stats-cache.json
15896
github-stats-cache.json
File diff suppressed because it is too large
Load Diff
8389
github-stats.json
8389
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, 38, 3]
|
||||
version_code = [3, 39]
|
||||
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
|
||||
|
||||
|
||||
|
||||
@ -38,6 +38,25 @@ 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:
|
||||
@ -182,10 +201,19 @@ def set_preview_method(method):
|
||||
core.get_config()['preview_method'] = method
|
||||
|
||||
|
||||
if args.preview_method == latent_preview.LatentPreviewMethod.NoPreviews:
|
||||
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:
|
||||
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):
|
||||
@ -1482,13 +1510,25 @@ 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()
|
||||
else:
|
||||
return web.Response(text=core.manager_funcs.get_current_preview_method(), status=200)
|
||||
return web.Response(status=200)
|
||||
|
||||
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)
|
||||
|
||||
|
||||
@routes.get("/manager/db_mode")
|
||||
|
||||
227
js/comfyui-gui-builder.js
Normal file
227
js/comfyui-gui-builder.js
Normal file
@ -0,0 +1,227 @@
|
||||
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,6 +20,7 @@ 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();
|
||||
|
||||
@ -44,12 +45,16 @@ docStyle.innerHTML = `
|
||||
|
||||
#cm-manager-dialog {
|
||||
width: 1000px;
|
||||
height: 455px;
|
||||
height: auto;
|
||||
box-sizing: content-box;
|
||||
z-index: 1000;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
#cm-manager-dialog br {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.cb-widget {
|
||||
width: 400px;
|
||||
height: 25px;
|
||||
@ -80,6 +85,7 @@ docStyle.innerHTML = `
|
||||
}
|
||||
|
||||
.cm-menu-container {
|
||||
padding : calc(var(--spacing)*2);
|
||||
column-gap: 20px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
@ -140,8 +146,8 @@ docStyle.innerHTML = `
|
||||
}
|
||||
|
||||
.cm-notice-board {
|
||||
width: 290px;
|
||||
height: 230px;
|
||||
width: auto;
|
||||
height: 280px;
|
||||
overflow: auto;
|
||||
color: var(--input-text);
|
||||
border: 1px solid var(--descrip-text);
|
||||
@ -238,68 +244,50 @@ var is_updating = false;
|
||||
// copied style from https://github.com/pythongosssss/ComfyUI-Custom-Scripts
|
||||
const style = `
|
||||
#workflowgallery-button {
|
||||
width: 310px;
|
||||
height: 27px;
|
||||
height: 50px;
|
||||
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: 310px;
|
||||
height: 30px;
|
||||
width: auto;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
font-size: 17px !important;
|
||||
background-color: var(--comfy-menu-secondary-bg);
|
||||
border-color: var(--border-color);
|
||||
color: var(--input-text);
|
||||
}
|
||||
|
||||
.cm-button:hover {
|
||||
filter: brightness(125%);
|
||||
}
|
||||
|
||||
.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: 290px;
|
||||
height: 30px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
font-size: 17px !important;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.cm-experimental {
|
||||
width: 310px;
|
||||
border: 1px solid #555;
|
||||
border-radius: 5px;
|
||||
padding: 10px;
|
||||
@ -326,8 +314,14 @@ const style = `
|
||||
|
||||
.cm-menu-combo {
|
||||
cursor: pointer;
|
||||
width: 310px;
|
||||
box-sizing: border-box;
|
||||
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%);
|
||||
}
|
||||
|
||||
.cm-small-button {
|
||||
@ -831,7 +825,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
const isElectron = 'electronAPI' in window;
|
||||
|
||||
update_comfyui_button =
|
||||
$el("button.cm-button", {
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Update ComfyUI",
|
||||
style: {
|
||||
@ -842,7 +836,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
});
|
||||
|
||||
switch_comfyui_button =
|
||||
$el("button.cm-button", {
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Switch ComfyUI",
|
||||
style: {
|
||||
@ -853,7 +847,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
});
|
||||
|
||||
restart_stop_button =
|
||||
$el("button.cm-button-red", {
|
||||
$el("button.p-button.p-component.cm-button-red", {
|
||||
type: "button",
|
||||
textContent: "Restart",
|
||||
onclick: () => restartOrStop()
|
||||
@ -861,7 +855,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
|
||||
if(isElectron) {
|
||||
update_all_button =
|
||||
$el("button.cm-button", {
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Update All Custom Nodes",
|
||||
onclick:
|
||||
@ -870,7 +864,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
else {
|
||||
update_all_button =
|
||||
$el("button.cm-button", {
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Update All",
|
||||
onclick:
|
||||
@ -880,7 +874,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
|
||||
const res =
|
||||
[
|
||||
$el("button.cm-button", {
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Custom Nodes Manager",
|
||||
onclick:
|
||||
@ -892,7 +886,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
}),
|
||||
|
||||
$el("button.cm-button", {
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Install Missing Custom Nodes",
|
||||
onclick:
|
||||
@ -904,7 +898,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
}),
|
||||
|
||||
$el("button.cm-button", {
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Custom Nodes In Workflow",
|
||||
onclick:
|
||||
@ -916,8 +910,8 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
}),
|
||||
|
||||
$el("br", {}, []),
|
||||
$el("button.cm-button", {
|
||||
$el("div", {}, []),
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Model Manager",
|
||||
onclick:
|
||||
@ -929,7 +923,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
}),
|
||||
|
||||
$el("button.cm-button", {
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Install via Git URL",
|
||||
onclick: async () => {
|
||||
@ -941,13 +935,13 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
}),
|
||||
|
||||
$el("br", {}, []),
|
||||
$el("div", {}, []),
|
||||
update_all_button,
|
||||
update_comfyui_button,
|
||||
switch_comfyui_button,
|
||||
// fetch_updates_button,
|
||||
|
||||
$el("br", {}, []),
|
||||
$el("div", {}, []),
|
||||
restart_stop_button,
|
||||
];
|
||||
|
||||
@ -960,12 +954,13 @@ 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";
|
||||
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)' }, []));
|
||||
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)' }, []));
|
||||
|
||||
api.fetchApi('/manager/db_mode')
|
||||
.then(response => response.text())
|
||||
@ -975,27 +970,110 @@ 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";
|
||||
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)' }, []));
|
||||
preview_combo.className = "cm-menu-combo p-select p-component p-inputwrapper p-inputwrapper-filled";
|
||||
|
||||
// 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 => { preview_combo.value = data; });
|
||||
.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';
|
||||
});
|
||||
|
||||
preview_combo.addEventListener('change', function (event) {
|
||||
api.fetchApi(`/manager/preview_method?value=${event.target.value}`);
|
||||
// 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);
|
||||
});
|
||||
});
|
||||
|
||||
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";
|
||||
channel_combo.className = "cm-menu-combo p-select p-component p-inputwrapper p-inputwrapper-filled";
|
||||
api.fetchApi('/manager/channel_url_list')
|
||||
.then(response => response.json())
|
||||
.then(async data => {
|
||||
@ -1004,7 +1082,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: `Channel: ${name_url[0]}` }, []));
|
||||
channel_combo.appendChild($el('option', { value: name_url[0], text: `${name_url[0]}` }, []));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1019,11 +1097,13 @@ 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";
|
||||
share_combo.className = "cm-menu-combo p-select p-component p-inputwrapper p-inputwrapper-filled";
|
||||
const share_options = [
|
||||
['none', 'None'],
|
||||
['openart', 'OpenArt AI'],
|
||||
@ -1034,7 +1114,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
['all', 'All'],
|
||||
];
|
||||
for (const option of share_options) {
|
||||
share_combo.appendChild($el('option', { value: option[0], text: `Share: ${option[1]}` }, []));
|
||||
share_combo.appendChild($el('option', { value: option[0], text: `${option[1]}` }, []));
|
||||
}
|
||||
|
||||
api.fetchApi('/manager/share_option')
|
||||
@ -1056,12 +1136,14 @@ 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";
|
||||
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' }, []));
|
||||
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' }, []));
|
||||
api.fetchApi('/manager/policy/component')
|
||||
.then(response => response.text())
|
||||
.then(data => {
|
||||
@ -1074,15 +1156,14 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
set_component_policy(event.target.value);
|
||||
});
|
||||
|
||||
update_policy_combo = document.createElement("select");
|
||||
const componentSetttingItem = createSettingsCombo("Component", component_policy_combo);
|
||||
|
||||
if(isElectron)
|
||||
update_policy_combo.style.display = 'none';
|
||||
update_policy_combo = document.createElement("select");
|
||||
|
||||
update_policy_combo.setAttribute("title", "Sets the policy to be applied when performing an update.");
|
||||
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' }, []));
|
||||
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' }, []));
|
||||
api.fetchApi('/manager/policy/update')
|
||||
.then(response => response.text())
|
||||
.then(data => {
|
||||
@ -1093,20 +1174,22 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
api.fetchApi(`/manager/policy/update?value=${event.target.value}`);
|
||||
});
|
||||
|
||||
return [
|
||||
$el("br", {}, []),
|
||||
this.datasrc_combo,
|
||||
channel_combo,
|
||||
preview_combo,
|
||||
share_combo,
|
||||
component_policy_combo,
|
||||
update_policy_combo,
|
||||
$el("br", {}, []),
|
||||
const updateSetttingItem = createSettingsCombo("Update", update_policy_combo);
|
||||
|
||||
if(isElectron)
|
||||
updateSetttingItem.style.display = 'none';
|
||||
|
||||
$el("br", {}, []),
|
||||
$el("filedset.cm-experimental", {}, [
|
||||
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("legend.cm-experimental-legend", {}, ["EXPERIMENTAL"]),
|
||||
$el("button.cm-experimental-button", {
|
||||
$el("button.p-button.p-component.cm-button.cm-experimental-button", {
|
||||
type: "button",
|
||||
textContent: "Snapshot Manager",
|
||||
onclick:
|
||||
@ -1116,7 +1199,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
SnapshotManager.instance.show();
|
||||
}
|
||||
}),
|
||||
$el("button.cm-experimental-button", {
|
||||
$el("button.p-button.p-component.cm-button.cm-experimental-button.mt-2", {
|
||||
type: "button",
|
||||
textContent: "Install PIP packages",
|
||||
onclick:
|
||||
@ -1134,7 +1217,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
|
||||
createControlsRight() {
|
||||
const elts = [
|
||||
$el("button.cm-button", {
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
id: 'cm-manual-button',
|
||||
type: "button",
|
||||
textContent: "Community Manual",
|
||||
@ -1185,11 +1268,11 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
})
|
||||
]),
|
||||
|
||||
$el("button", {
|
||||
$el("button.p-button.p-component.cm-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")
|
||||
@ -1212,7 +1295,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] : ''})`,
|
||||
textContent: `(${localStorage.getItem("wg_last_visited") ? localStorage.getItem("wg_last_visited").split('/')[2] : 'none selected'})`,
|
||||
style: {
|
||||
'text-align': 'center',
|
||||
'color': 'var(--input-text)',
|
||||
@ -1228,13 +1311,12 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
})
|
||||
]),
|
||||
|
||||
$el("button.cm-button", {
|
||||
$el("button.p-button.p-component.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");
|
||||
@ -1249,31 +1331,23 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
const close_button = $el("button", { id: "cm-close-button", type: "button", textContent: "Close", onclick: () => this.close() });
|
||||
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 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()])
|
||||
]),
|
||||
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
|
||||
|
||||
$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 ]);
|
||||
this.element = frame;
|
||||
}
|
||||
|
||||
get isVisible() {
|
||||
@ -1281,7 +1355,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
|
||||
show() {
|
||||
this.element.style.display = "block";
|
||||
this.element.style.display = "flex";
|
||||
}
|
||||
|
||||
toggleVisibility() {
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
.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: 80%;
|
||||
height: 80%;
|
||||
width: 80vw;
|
||||
height: 75vh;
|
||||
min-height: 30em;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
@ -10,6 +11,7 @@
|
||||
font-family: arial, sans-serif;
|
||||
text-underline-offset: 3px;
|
||||
outline: none;
|
||||
margin: calc(var(--spacing)*2);
|
||||
}
|
||||
|
||||
.cn-manager .cn-flex-auto {
|
||||
@ -17,17 +19,21 @@
|
||||
}
|
||||
|
||||
.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 {
|
||||
@ -40,8 +46,13 @@
|
||||
|
||||
.cn-manager .cn-manager-restart {
|
||||
display: none;
|
||||
background-color: #500000;
|
||||
color: white;
|
||||
background-color: #500000 !important;
|
||||
border-color: #88181b !important;
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.cn-manager .cn-manager-restart:hover {
|
||||
background-color: #88181b !important;
|
||||
}
|
||||
|
||||
.cn-manager .cn-manager-stop {
|
||||
@ -79,7 +90,6 @@
|
||||
flex-wrap: wrap;
|
||||
gap: 5px;
|
||||
align-items: center;
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
.cn-manager-header label {
|
||||
@ -91,16 +101,32 @@
|
||||
.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 {
|
||||
@ -588,6 +614,10 @@
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.cn-install-buttons button {
|
||||
padding: 4px 8px;
|
||||
}
|
||||
|
||||
.cn-selected-buttons {
|
||||
display: flex;
|
||||
gap: 5px;
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
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,
|
||||
@ -18,32 +19,19 @@ loadCss("./custom-nodes-manager.css");
|
||||
const gridId = "node";
|
||||
|
||||
const pageHtml = `
|
||||
<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 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>
|
||||
`;
|
||||
|
||||
@ -89,11 +77,26 @@ export class CustomNodesManager {
|
||||
}
|
||||
|
||||
init() {
|
||||
this.element = $el("div", {
|
||||
parent: document.body,
|
||||
className: "comfy-modal cn-manager"
|
||||
});
|
||||
this.element.innerHTML = pageHtml;
|
||||
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.setAttribute("tabindex", 0);
|
||||
this.element.focus();
|
||||
|
||||
@ -372,7 +375,7 @@ export class CustomNodesManager {
|
||||
|
||||
return list.map(id => {
|
||||
const bt = buttons[id];
|
||||
return `<button class="cn-btn-${id}" group="${action}" mode="${bt.mode}">${bt.label}</button>`;
|
||||
return `<button class="cn-btn-${id} p-button p-component" group="${action}" mode="${bt.mode}">${bt.label}</button>`;
|
||||
}).join("");
|
||||
}
|
||||
|
||||
@ -655,7 +658,6 @@ export class CustomNodesManager {
|
||||
}
|
||||
|
||||
renderGrid() {
|
||||
|
||||
// update theme
|
||||
const globalStyle = window.getComputedStyle(document.body);
|
||||
this.colorVars = {
|
||||
|
||||
@ -1,13 +1,15 @@
|
||||
.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: 80%;
|
||||
height: 80%;
|
||||
width: 80vw;
|
||||
height: 75vh;
|
||||
min-height: 30em;
|
||||
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 {
|
||||
@ -18,14 +20,15 @@
|
||||
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 {
|
||||
@ -38,7 +41,7 @@
|
||||
|
||||
.cmm-manager .cmm-manager-refresh {
|
||||
display: none;
|
||||
background-color: #000080;
|
||||
background-color: #000080 !important;
|
||||
color: white;
|
||||
}
|
||||
|
||||
@ -53,7 +56,6 @@
|
||||
flex-wrap: wrap;
|
||||
gap: 5px;
|
||||
align-items: center;
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
.cmm-manager-header label {
|
||||
@ -67,16 +69,34 @@
|
||||
.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 {
|
||||
@ -148,6 +168,10 @@
|
||||
color: white;
|
||||
}
|
||||
|
||||
.cmm-btn-install {
|
||||
padding: 4px 8px;
|
||||
}
|
||||
|
||||
.cmm-btn-download {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
|
||||
@ -9,39 +9,22 @@ 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-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 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>
|
||||
`;
|
||||
|
||||
@ -64,11 +47,23 @@ export class ModelManager {
|
||||
}
|
||||
|
||||
init() {
|
||||
this.element = $el("div", {
|
||||
parent: document.body,
|
||||
className: "comfy-modal cmm-manager"
|
||||
});
|
||||
this.element.innerHTML = pageHtml;
|
||||
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.initFilter();
|
||||
this.bindEvents();
|
||||
this.initGrid();
|
||||
@ -347,7 +342,7 @@ export class ModelManager {
|
||||
if (installed === "True") {
|
||||
return `<div class="cmm-icon-passed">${icons.passed}</div>`;
|
||||
}
|
||||
return `<button class="cmm-btn-install" mode="install">Install</button>`;
|
||||
return `<button class="cmm-btn-install p-button p-component" mode="install">Install</button>`;
|
||||
}
|
||||
}, {
|
||||
id: 'url',
|
||||
@ -420,7 +415,7 @@ export class ModelManager {
|
||||
}
|
||||
|
||||
this.selectedModels = selectedList;
|
||||
this.showSelection(`<span>Selected <b>${selectedList.length}</b> models <button class="cmm-btn-install" mode="install">Install</button>`);
|
||||
this.showSelection(`<span>Selected <b>${selectedList.length}</b> models <button class="cmm-btn-install p-button p-component" mode="install">Install</button>`);
|
||||
}
|
||||
|
||||
focusInstall(item) {
|
||||
|
||||
65
js/snapshot.css
Normal file
65
js/snapshot.css
Normal file
@ -0,0 +1,65 @@
|
||||
.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,8 +1,10 @@
|
||||
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 } from "./common.js";
|
||||
import { manager_instance, rebootAPI, show_message, handle403Response, loadCss } from "./common.js";
|
||||
import { buildGuiFrame } from "./comfyui-gui-builder.js";
|
||||
|
||||
loadCss("./snapshot.css");
|
||||
|
||||
async function restore_snapshot(target) {
|
||||
if(SnapshotManager.instance) {
|
||||
@ -27,7 +29,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='cm-small-button'>RESTART</button> ComfyUI. And refresh browser.", 'cm-reboot-button2');
|
||||
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');
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -88,6 +90,8 @@ export class SnapshotManager extends ComfyDialog {
|
||||
message_box = null;
|
||||
data = null;
|
||||
|
||||
content = $el("div.snapshot-manager");
|
||||
|
||||
clear() {
|
||||
this.restore_buttons = [];
|
||||
this.message_box = null;
|
||||
@ -96,9 +100,18 @@ export class SnapshotManager extends ComfyDialog {
|
||||
|
||||
constructor(app, manager_dialog) {
|
||||
super();
|
||||
this.manager_dialog = manager_dialog;
|
||||
// this.manager_dialog = manager_dialog;
|
||||
this.search_keyword = '';
|
||||
this.element = $el("div.comfy-modal", { parent: document.body }, []);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
async remove_item() {
|
||||
@ -109,7 +122,7 @@ export class SnapshotManager extends ComfyDialog {
|
||||
|
||||
createControls() {
|
||||
return [
|
||||
$el("button.cm-small-button", {
|
||||
$el("button.p-button.p-component", {
|
||||
type: "button",
|
||||
textContent: "Close",
|
||||
onclick: () => { this.close(); }
|
||||
@ -132,8 +145,8 @@ export class SnapshotManager extends ComfyDialog {
|
||||
this.clear();
|
||||
this.data = (await getSnapshotList()).items;
|
||||
|
||||
while (this.element.children.length) {
|
||||
this.element.removeChild(this.element.children[0]);
|
||||
while (this.content.children.length) {
|
||||
this.content.removeChild(this.content.children[0]);
|
||||
}
|
||||
|
||||
await this.createGrid();
|
||||
@ -204,20 +217,21 @@ 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);
|
||||
@ -241,13 +255,14 @@ 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);
|
||||
|
||||
@ -256,25 +271,17 @@ export class SnapshotManager extends ComfyDialog {
|
||||
grid.style.width = "100%";
|
||||
grid.style.height = "100%";
|
||||
grid.style.overflowY = "scroll";
|
||||
this.element.style.height = "85%";
|
||||
this.element.style.width = "80%";
|
||||
this.element.appendChild(panel);
|
||||
|
||||
this.content.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 = "cm-small-button";
|
||||
save_button.className = "p-button p-component";
|
||||
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";
|
||||
|
||||
@ -282,15 +289,19 @@ export class SnapshotManager extends ComfyDialog {
|
||||
this.message_box.style.height = '60px';
|
||||
this.message_box.style.verticalAlign = 'middle';
|
||||
|
||||
this.element.appendChild(this.message_box);
|
||||
this.element.appendChild(close_button);
|
||||
this.element.appendChild(save_button);
|
||||
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);
|
||||
}
|
||||
|
||||
async show() {
|
||||
try {
|
||||
this.invalidateControl();
|
||||
this.element.style.display = "block";
|
||||
this.element.style.display = "flex";
|
||||
this.element.style.zIndex = 1099;
|
||||
}
|
||||
catch(exception) {
|
||||
|
||||
@ -1,5 +1,95 @@
|
||||
{
|
||||
"custom_nodes": [
|
||||
"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]",
|
||||
@ -70,16 +160,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node for image analysis and evaluation. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "AndSni",
|
||||
"title": "Comfy-FL-Nodes",
|
||||
"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": "Spicely",
|
||||
"title": "[WIP] ComfyUI-Luma",
|
||||
@ -1674,16 +1754,6 @@
|
||||
"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]",
|
||||
@ -2104,16 +2174,6 @@
|
||||
"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",
|
||||
@ -8670,16 +8730,6 @@
|
||||
"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",
|
||||
|
||||
@ -634,6 +634,16 @@
|
||||
"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"
|
||||
@ -941,14 +951,6 @@
|
||||
"title_aux": "AmorForge"
|
||||
}
|
||||
],
|
||||
"https://github.com/AndSni/Comfy-FL-Nodes": [
|
||||
[
|
||||
"CommerceHumanGenerator"
|
||||
],
|
||||
{
|
||||
"title_aux": "Comfy-FL-Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/Anonymzx/ComfyUI-Indonesia-TTS": [
|
||||
[
|
||||
"Facebook MMS-TTS-IND Variants FX"
|
||||
@ -1802,6 +1804,22 @@
|
||||
"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",
|
||||
@ -1850,6 +1868,15 @@
|
||||
"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",
|
||||
@ -2162,8 +2189,11 @@
|
||||
],
|
||||
"https://github.com/IgPoly/ComfyUI-igTools": [
|
||||
[
|
||||
"IGT_AspectRatioResizer",
|
||||
"IGT_FloatMinMax",
|
||||
"IGT_ImageResizer",
|
||||
"IGT_ImageTilesCalc",
|
||||
"IGT_IntMinMax",
|
||||
"IGT_SimpleTilesCalc"
|
||||
],
|
||||
{
|
||||
@ -2342,15 +2372,18 @@
|
||||
"https://github.com/JosDigby/ComfyUI-DigbyWan": [
|
||||
[
|
||||
"DigbyLoopClose",
|
||||
"DigbyLoopCloseState",
|
||||
"DigbyLoopOpen",
|
||||
"DigbyLoopOpenState",
|
||||
"DigbyLoopStatePack",
|
||||
"DigbyLoopStateUnpack",
|
||||
"ImageBatchLoopExtract",
|
||||
"WanMiddleFrameToVideo",
|
||||
"WanSmoothVideoTransition",
|
||||
"WanVACEVideoSmoother"
|
||||
"DigbyLoopRetrieveImages",
|
||||
"DigbyLoopStoreImages",
|
||||
"DigbyLoopVariables",
|
||||
"DigbyLoopVariablesInit",
|
||||
"DigbyWan22MiddleFrameToVideo",
|
||||
"DigbyWan22SmoothVideoTransition",
|
||||
"DigbyWanMoeKSampler",
|
||||
"DigbyWanMoeKSamplerBasic",
|
||||
"DigbyWanVACEVideoBridge",
|
||||
"DigbyWanVACEVideoExtend",
|
||||
"DigbyWanVACEVideoSmooth"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-DigbyWan"
|
||||
@ -3166,6 +3199,7 @@
|
||||
"DJZColorWheel",
|
||||
"DJZDatamosh",
|
||||
"DJZDatamoshV2",
|
||||
"DJZImageScaleToMegabytes",
|
||||
"DJZImageScaleToTotalPixels",
|
||||
"DJZ_ParallaxV1",
|
||||
"DatasetWordcloud",
|
||||
@ -3525,6 +3559,14 @@
|
||||
"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"
|
||||
@ -6463,6 +6505,7 @@
|
||||
"https://github.com/chetusangolgi/Comfyui-supabase": [
|
||||
[
|
||||
"SupabaseAudioUploader",
|
||||
"SupabaseGLBUploader",
|
||||
"SupabaseImageUploader",
|
||||
"SupabaseTableWatcherNode"
|
||||
],
|
||||
@ -6887,6 +6930,7 @@
|
||||
"ReplaceVideoLatentFrames",
|
||||
"RescaleCFG",
|
||||
"ResizeAndPadImage",
|
||||
"ResolutionBucket",
|
||||
"Rodin3D_Detail",
|
||||
"Rodin3D_Gen2",
|
||||
"Rodin3D_Regular",
|
||||
@ -7878,29 +7922,6 @@
|
||||
"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"
|
||||
@ -9728,15 +9749,14 @@
|
||||
"title_aux": "ComfyUI_Scoring-Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/lfelipegg/lfgg_custom_nodes": [
|
||||
"https://github.com/lfelipegg/lfgg_custom_nodes_comfyui": [
|
||||
[
|
||||
"LFGG - Resolution Tools",
|
||||
"LFGG KSampler (advanced) - Config",
|
||||
"LFGG KSampler - Config",
|
||||
"ModelMergeCombos"
|
||||
"LfggImageResolutionByRatio",
|
||||
"LfggLatentSizeByRatio",
|
||||
"LfggPixelBudgetLatentSize"
|
||||
],
|
||||
{
|
||||
"title_aux": "lfgg_custom_nodes [WIP]"
|
||||
"title_aux": "[WIP] lfgg_custom_nodes_comfyui"
|
||||
}
|
||||
],
|
||||
"https://github.com/lggcfx2020/ComfyUI-LGGCFX-Tools": [
|
||||
@ -10673,15 +10693,6 @@
|
||||
"title_aux": "ComfyUI-WanPlus"
|
||||
}
|
||||
],
|
||||
"https://github.com/neverbiasu/ComfyUI-ControlNeXt": [
|
||||
[
|
||||
"ControlNextPipelineConfig",
|
||||
"ControlNextSDXL"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-ControlNeXt [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/neverbiasu/ComfyUI-DeepSeek": [
|
||||
[
|
||||
"DeepSeekCaller"
|
||||
@ -10784,7 +10795,9 @@
|
||||
"ExtractPromptFromImage",
|
||||
"FloatToString",
|
||||
"FloatToStringWithPrefix",
|
||||
"LoraWildcardGenerator"
|
||||
"IsComfyQueueEmpty",
|
||||
"LoraWildcardGenerator",
|
||||
"RepeatTextLines"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-samenodes"
|
||||
@ -11100,15 +11113,6 @@
|
||||
"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"
|
||||
@ -11693,6 +11697,23 @@
|
||||
"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"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,56 @@
|
||||
{
|
||||
"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]",
|
||||
|
||||
@ -1,5 +1,145 @@
|
||||
{
|
||||
"custom_nodes": [
|
||||
{
|
||||
"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": "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": "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": "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": "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": "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": "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": "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."
|
||||
},
|
||||
{
|
||||
"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": "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": "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": "ckinpdx",
|
||||
"title": "ComfyUI-SCAIL-AudioReactive",
|
||||
@ -607,127 +747,6 @@
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Complete workflow suite for ComfyUI that transforms images into PBR material sets ready for game engines and 3D software."
|
||||
},
|
||||
{
|
||||
"author": "beyondprompting",
|
||||
"title": "ComfyUI-Beyond_nodes",
|
||||
"reference": "https://github.com/beyondprompting/ComfyUI-Beyond_nodes",
|
||||
"files": [
|
||||
"https://github.com/beyondprompting/ComfyUI-Beyond_nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Create complex compositions the FAST and EASY way."
|
||||
},
|
||||
{
|
||||
"author": "Zone-Roam",
|
||||
"title": "ComfyUI-Live-Search",
|
||||
"reference": "https://github.com/Zone-Roam/ComfyUI-Live-Search",
|
||||
"files": [
|
||||
"https://github.com/Zone-Roam/ComfyUI-Live-Search"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "🌐 Live Search: Real-time web search and AI summarization. Internet search, web scraping, fact checking, weather, news, GPS coordinate conversion. DuckDuckGo search with GPT-5.1, DeepSeek-V3, Gemini 3 Pro, Claude 4.5, Qwen3, Doubao, SiliconFlow (69+ models), Llama 4, Ollama. Modular architecture with API loader. Toggle web search on/off for pure LLM mode."
|
||||
},
|
||||
{
|
||||
"author": "DayMan84",
|
||||
"title": "ComfyUI-Ugromana",
|
||||
"id": "comfyui-usgromana",
|
||||
"reference": "https://github.com/DayMan84/ComfyUI-Usgromana",
|
||||
"files": [
|
||||
"https://github.com/DayMan84/ComfyUI-Usgromana"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "The next-generation security, governance, permissions, and multi‑user control system for ComfyUI."
|
||||
},
|
||||
{
|
||||
"author": "UmeAiRT",
|
||||
"title": "ComfyUI-UmeAiRT-Sync",
|
||||
"reference": "https://github.com/UmeAiRT/ComfyUI-UmeAiRT-Sync",
|
||||
"files": [
|
||||
"https://github.com/UmeAiRT/ComfyUI-UmeAiRT-Sync"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Automatic workflow synchronizer/loader for UmeAiRT Workflows (Flux, SDXL, WAN, etc.)."
|
||||
},
|
||||
{
|
||||
"author": "dzy1128",
|
||||
"title": "ComfyUI-Vector-Engine",
|
||||
"reference": "https://github.com/dzy1128/ComfyUI-Vector-Engine",
|
||||
"files": [
|
||||
"https://github.com/dzy1128/ComfyUI-Vector-Engine"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for high-level image generation and editing with Vector Engine Gemini API integration. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "xiangyuT",
|
||||
"title": "ComfyUI-PromptEnhance",
|
||||
"reference": "https://github.com/xiangyuT/ComfyUI-PromptEnhance",
|
||||
"files": [
|
||||
"https://github.com/xiangyuT/ComfyUI-PromptEnhance"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node for enhancing prompts using OpenAI-compatible APIs (like DeepSeek, OpenAI, etc.)."
|
||||
},
|
||||
{
|
||||
"author": "anilstream",
|
||||
"title": "ComfyUI-Ideogram-Character",
|
||||
"reference": "https://github.com/anilstream/ComfyUI-Ideogram-Character",
|
||||
"files": [
|
||||
"https://github.com/anilstream/ComfyUI-Ideogram-Character"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom ComfyUI node for generating consistent character images using Ideogram API v3's character reference feature. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "EricRollei",
|
||||
"title": "Emu35-Comfyui-Nodes",
|
||||
"reference": "https://github.com/EricRollei/Emu35-Comfyui-Nodes",
|
||||
"files": [
|
||||
"https://github.com/EricRollei/Emu35-Comfyui-Nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI integration for BAAI's Emu3.5 multimodal models for text-to-image generation and multimodal understanding. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "dandancow874",
|
||||
"title": "ComfyUI-LMStudio-Controller",
|
||||
"reference": "https://github.com/dandancow874/ComfyUI-LMStudio-Controller",
|
||||
"files": [
|
||||
"https://github.com/dandancow874/ComfyUI-LMStudio-Controller"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Integrates LM Studio's CLI to perform Vision Language Model inference locally in ComfyUI with advanced memory management and anti-OOM protection."
|
||||
},
|
||||
{
|
||||
"author": "eddyhhlure1Eddy",
|
||||
"title": "ComfyUI-LLM-GGUF",
|
||||
"reference": "https://github.com/eddyhhlure1Eddy/ComfyUI-LLM-GGUF",
|
||||
"files": [
|
||||
"https://github.com/eddyhhlure1Eddy/ComfyUI-LLM-GGUF"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for GGUF LLM model inference with chat support, conversation history, session management, and GPU layer offloading."
|
||||
},
|
||||
{
|
||||
"author": "johninthewinter",
|
||||
"title": "comfyui-fal-flux-2-John",
|
||||
"reference": "https://github.com/johninthewinter/comfyui-fal-flux-2-John",
|
||||
"files": [
|
||||
"https://github.com/johninthewinter/comfyui-fal-flux-2-John"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom nodes for ComfyUI that integrate with fal.ai's FLUX 2 and FLUX 1 LoRA APIs for text-to-image generation."
|
||||
},
|
||||
{
|
||||
"author": "Merserk",
|
||||
"title": "ComfyUI-Flow-Assistor",
|
||||
"reference": "https://github.com/Merserk/ComfyUI-Flow-Assistor",
|
||||
"files": [
|
||||
"https://github.com/Merserk/ComfyUI-Flow-Assistor"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Essential utility nodes for ComfyUI including prompt queue, batch processing, camera angle control, and resolution selector. (Description by CC)"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@ -18,14 +18,6 @@
|
||||
"title_aux": "mmaker/Color Enhance"
|
||||
}
|
||||
],
|
||||
"https://gitee.com/yyh915/jkha-load-img": [
|
||||
[
|
||||
"JkhaLoadImage"
|
||||
],
|
||||
{
|
||||
"title_aux": "ImageLoadFromLocalOrUrl Node for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/0x-jerry/comfyui-rembg": [
|
||||
[
|
||||
"Load Rembg Model",
|
||||
@ -6128,17 +6120,21 @@
|
||||
],
|
||||
"https://github.com/DragonDiffusionbyBoyo/Boyonodes": [
|
||||
[
|
||||
"BoyoApplyIPAdapterZImage",
|
||||
"BoyoAssetGrabberAdvanced",
|
||||
"BoyoAssetGrabberSimple",
|
||||
"BoyoAudioEval",
|
||||
"BoyoChainBastardLoops",
|
||||
"BoyoCompare",
|
||||
"BoyoExecutionBarrier",
|
||||
"BoyoForLoopEnd",
|
||||
"BoyoForLoopStart",
|
||||
"BoyoFramePackLoRA",
|
||||
"BoyoIPAdapterZImageLoader",
|
||||
"BoyoImageCrop",
|
||||
"BoyoImageGrab",
|
||||
"BoyoIncontextSaver",
|
||||
"BoyoLatentPassthrough",
|
||||
"BoyoLoRAConfigInspector",
|
||||
"BoyoLoRAConfigProcessor",
|
||||
"BoyoLoRAJSONBuilder",
|
||||
@ -6155,6 +6151,7 @@
|
||||
"BoyoPromptInjector",
|
||||
"BoyoPromptLoop",
|
||||
"BoyoQwenVLGrounding",
|
||||
"BoyoResolutionCalc",
|
||||
"BoyoSaver",
|
||||
"BoyoStoryboardOutput",
|
||||
"BoyoStoryboardPrompt",
|
||||
@ -6696,10 +6693,15 @@
|
||||
"https://github.com/EricRollei/Emu35-Comfyui-Nodes": [
|
||||
[
|
||||
"Emu35ClearCache",
|
||||
"Emu35InterleavedGenerator",
|
||||
"Emu35Loader",
|
||||
"Emu35LoaderV2",
|
||||
"Emu35MemoryManager",
|
||||
"Emu35OfficialT2I",
|
||||
"Emu35Sampler",
|
||||
"Emu35VQA"
|
||||
"Emu35T2ISamplerV2",
|
||||
"Emu35VQA",
|
||||
"Emu35X2ISampler"
|
||||
],
|
||||
{
|
||||
"title_aux": "Emu35-Comfyui-Nodes"
|
||||
@ -7052,6 +7054,14 @@
|
||||
"title_aux": "MultiModel"
|
||||
}
|
||||
],
|
||||
"https://github.com/Faildes/ComfyUI-NegativeFold": [
|
||||
[
|
||||
"FoldNegativeIntoPositiveConditioning"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-NegativeFold"
|
||||
}
|
||||
],
|
||||
"https://github.com/Fannovel16/ComfyUI-Frame-Interpolation": [
|
||||
[
|
||||
"AMT VFI",
|
||||
@ -8114,6 +8124,26 @@
|
||||
"title_aux": "ComfyUI-DiffusersImageOutpaint"
|
||||
}
|
||||
],
|
||||
"https://github.com/GiusTex/ComfyUI-MoreEfficientSamplers": [
|
||||
[
|
||||
"SamplerCustomAdvanced_Efficient",
|
||||
"SamplerCustomUltraAdvancedEfficient"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-MoreEfficientSamplers"
|
||||
}
|
||||
],
|
||||
"https://github.com/GiusTex/ComfyUI-Wan-TimeToMove": [
|
||||
[
|
||||
"AddTTMLatent",
|
||||
"TTMKSamplerSelect",
|
||||
"WanVideoEncode",
|
||||
"WanVideoSamplerCustomUltraAdvancedEfficient"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Wan-TimeToMove"
|
||||
}
|
||||
],
|
||||
"https://github.com/GizmoR13/PG-Nodes": [
|
||||
[
|
||||
"PgCheckpointSelect",
|
||||
@ -10128,17 +10158,19 @@
|
||||
"JNodes_AudioInputOptions",
|
||||
"JNodes_BooleanSelectorWithString",
|
||||
"JNodes_BreakMediaInfo",
|
||||
"JNodes_CacheGlobalParameters",
|
||||
"JNodes_CheckpointSelectorWithString",
|
||||
"JNodes_ConditioningInOut",
|
||||
"JNodes_CreateStereoscopicImageFromDepth",
|
||||
"JNodes_DiffusionModelSelector",
|
||||
"JNodes_EmptyCudaCache",
|
||||
"JNodes_FloatLiteral",
|
||||
"JNodes_GetCleanFilename",
|
||||
"JNodes_GetComfyDirectory",
|
||||
"JNodes_GetLeafDirectory",
|
||||
"JNodes_GetOutputDirectory",
|
||||
"JNodes_GetParameterFromList",
|
||||
"JNodes_GetParameterGlobal",
|
||||
"JNodes_GetParameterFromTable",
|
||||
"JNodes_GetTempDirectory",
|
||||
"JNodes_ImageFormatSelector",
|
||||
"JNodes_ImageSizeSelector",
|
||||
@ -10149,11 +10181,11 @@
|
||||
"JNodes_LoadVisualMediaFromPath_Batch",
|
||||
"JNodes_LoadVisualMediaFromPath_List",
|
||||
"JNodes_LoraExtractor",
|
||||
"JNodes_MakeParameterTable",
|
||||
"JNodes_MediaInfoToString",
|
||||
"JNodes_ModelInOut",
|
||||
"JNodes_OutVideoInfo",
|
||||
"JNodes_ParseDynamicPrompts",
|
||||
"JNodes_ParseParametersToGlobalList",
|
||||
"JNodes_ParseWildcards",
|
||||
"JNodes_PromptBuilderSingleSubject",
|
||||
"JNodes_RemoveCommentedText",
|
||||
@ -11351,6 +11383,7 @@
|
||||
"https://github.com/Lakonik/ComfyUI-piFlow": [
|
||||
[
|
||||
"Load pi-Flow Model",
|
||||
"Load pi-Flow Model (GGUF)",
|
||||
"ModelSamplingPiFlow",
|
||||
"pi-Flow Sampler"
|
||||
],
|
||||
@ -11846,6 +11879,7 @@
|
||||
"ImageMetadataSaver",
|
||||
"LMMExtractPromptsNode",
|
||||
"LatentSettings",
|
||||
"Loraloadertotext",
|
||||
"PipeHub",
|
||||
"PreviewMask",
|
||||
"UniversalLatentSettings",
|
||||
@ -12812,7 +12846,10 @@
|
||||
"BypassControl",
|
||||
"CLIPTextEncodePromptEnrichment",
|
||||
"CameraAngleControl",
|
||||
"DetailEnhanceSamplerNode",
|
||||
"DetailEnhanceSigmasNode",
|
||||
"DisplayText",
|
||||
"ImageResolutionExtractorNode",
|
||||
"ImageResolutionFitNode",
|
||||
"MultiplicationNode",
|
||||
"PromptQueue",
|
||||
@ -12820,6 +12857,8 @@
|
||||
"ResolutionSelectNode",
|
||||
"TileCompositor",
|
||||
"TileManager",
|
||||
"UltimateDetailSamplerNode",
|
||||
"UltimateDetailSigmasNode",
|
||||
"VRAMRAMCleanerNode",
|
||||
"VisualMarqueeSelection"
|
||||
],
|
||||
@ -14850,6 +14889,15 @@
|
||||
"title_aux": "ComfyUI-SAM3DBody"
|
||||
}
|
||||
],
|
||||
"https://github.com/PozzettiAndrea/ComfyUI-Sharp": [
|
||||
[
|
||||
"LoadSharpModel",
|
||||
"SharpPredict"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Sharp"
|
||||
}
|
||||
],
|
||||
"https://github.com/PressWagon/ComfyUI-StringsAndThings": [
|
||||
[
|
||||
"DebugString",
|
||||
@ -14998,6 +15046,15 @@
|
||||
"title_aux": "comfyui-qbug-batch"
|
||||
}
|
||||
],
|
||||
"https://github.com/QL-boy/ComfyUI-Advanced-Tile-Processing": [
|
||||
[
|
||||
"CustomTileMerger",
|
||||
"CustomTileSplitter"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Advanced-Tile-Processing"
|
||||
}
|
||||
],
|
||||
"https://github.com/QaisMalkawi/ComfyUI-QaisHelper": [
|
||||
[
|
||||
"Bool Binary Operation",
|
||||
@ -15981,7 +16038,6 @@
|
||||
],
|
||||
"https://github.com/SatadalAI/SATA_UtilityNode": [
|
||||
[
|
||||
"ImageSaveWithMetadata",
|
||||
"Latent Machine",
|
||||
"Latent_Machine",
|
||||
"Prompt Autocomplete",
|
||||
@ -15990,7 +16046,8 @@
|
||||
"Prompt_Machine",
|
||||
"Resolution Machine",
|
||||
"Resolution_Machine",
|
||||
"Save Image w/Metadata",
|
||||
"Save Machine",
|
||||
"Save_Machine",
|
||||
"Upscale Machine",
|
||||
"Upscale_Machine"
|
||||
],
|
||||
@ -19669,7 +19726,8 @@
|
||||
"WASMoEConditioningListAppend",
|
||||
"WASSaveLUT",
|
||||
"WASTiledImageUpscaleWithModel",
|
||||
"WASWan22MoESamplerCtx"
|
||||
"WASWan22MoESamplerCtx",
|
||||
"WASWanExposureStabilizer"
|
||||
],
|
||||
{
|
||||
"title_aux": "WAS_Extras"
|
||||
@ -20175,6 +20233,16 @@
|
||||
"title_aux": "ComfyUI-MIKKY-Mask-Editor"
|
||||
}
|
||||
],
|
||||
"https://github.com/XYMikky12138/ComfyUI-NanoBanana-inpaint": [
|
||||
[
|
||||
"BananaImageResizeFit",
|
||||
"BananaSmartCrop",
|
||||
"BananaUncropPaste"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-NanoBanana-inpaint"
|
||||
}
|
||||
],
|
||||
"https://github.com/XchanBik/ComfyUI_SimpleBridgeNode": [
|
||||
[
|
||||
"LoraTextLoader",
|
||||
@ -21938,7 +22006,6 @@
|
||||
"https://github.com/ainewsto/Comfyui_Comfly_v2": [
|
||||
[
|
||||
"ComflyChatGPTApi",
|
||||
"ComflyGeminiTextOnly",
|
||||
"ComflyGoogelVeo3",
|
||||
"ComflyJimengApi",
|
||||
"ComflyJimengVideoApi",
|
||||
@ -21958,9 +22025,10 @@
|
||||
"Comfly_Mj_swap_face",
|
||||
"Comfly_Mju",
|
||||
"Comfly_Mjv",
|
||||
"Comfly_Z_image_turbo",
|
||||
"Comfly_api_set",
|
||||
"Comfly_gpt_image_1",
|
||||
"Comfly_gpt_image_1_edit",
|
||||
"Comfly_gpt_image",
|
||||
"Comfly_gpt_image_edit",
|
||||
"Comfly_kling_image2video",
|
||||
"Comfly_kling_multi_image2video",
|
||||
"Comfly_kling_text2video",
|
||||
@ -22197,6 +22265,7 @@
|
||||
],
|
||||
"https://github.com/akawana/ComfyUI-RGBYP-Mask-Editor": [
|
||||
[
|
||||
"MaskGrowBlur",
|
||||
"RGBYPLoadImage",
|
||||
"RGBYPMaskBridge",
|
||||
"RGBYPMaskCompositeWithStrength",
|
||||
@ -22211,6 +22280,9 @@
|
||||
],
|
||||
"https://github.com/akawana/ComfyUI-Utils-extra": [
|
||||
[
|
||||
"AK Base",
|
||||
"AK Base Settings",
|
||||
"AK Base Settings Out",
|
||||
"AKSamplerSettings",
|
||||
"AKSettingsOut",
|
||||
"CLIPEncodeMultiple",
|
||||
@ -22568,6 +22640,7 @@
|
||||
],
|
||||
"https://github.com/alexopus/ComfyUI-Image-Saver": [
|
||||
[
|
||||
"Any to String (Image Saver)",
|
||||
"Cfg Literal (Image Saver)",
|
||||
"Checkpoint Loader with Name (Image Saver)",
|
||||
"Civitai Hash Fetcher (Image Saver)",
|
||||
@ -22578,18 +22651,11 @@
|
||||
"Image Saver Simple",
|
||||
"Input Parameters (Image Saver)",
|
||||
"Int Literal (Image Saver)",
|
||||
"Sampler Selector (Image Saver)",
|
||||
"SamplerToString (Image Saver)",
|
||||
"Scheduler Selector (Eff.) (Image Saver)",
|
||||
"Scheduler Selector (Image Saver)",
|
||||
"Scheduler Selector (inspire) (Image Saver)",
|
||||
"SchedulerEfficiencyToString (Image Saver)",
|
||||
"SchedulerInspireToString (Image Saver)",
|
||||
"SchedulerToString (Image Saver)",
|
||||
"Seed Generator (Image Saver)",
|
||||
"String Literal (Image Saver)",
|
||||
"UNet loader with Name (Image Saver)",
|
||||
"Width/Height Literal (Image Saver)"
|
||||
"Width/Height Literal (Image Saver)",
|
||||
"Workflow Input Value (Image Saver)"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI Image Saver"
|
||||
@ -22778,6 +22844,7 @@
|
||||
"ArchAi3D_Color_Correction_BT709",
|
||||
"ArchAi3D_Conditioning_Balance",
|
||||
"ArchAi3D_Dependency_Installer",
|
||||
"ArchAi3D_DiffSynth_ControlNet",
|
||||
"ArchAi3D_Empty_Latent_Batch",
|
||||
"ArchAi3D_Float_Input",
|
||||
"ArchAi3D_GDrive_Download",
|
||||
@ -22816,6 +22883,8 @@
|
||||
"ArchAi3D_Qwen_Exterior_Navigation",
|
||||
"ArchAi3D_Qwen_Exterior_View_Control",
|
||||
"ArchAi3D_Qwen_Image_Scale",
|
||||
"ArchAi3D_Qwen_Image_Scale_V2",
|
||||
"ArchAi3D_Qwen_Image_Stitch",
|
||||
"ArchAi3D_Qwen_Interior_Focus",
|
||||
"ArchAi3D_Qwen_Interior_Navigation",
|
||||
"ArchAi3D_Qwen_Interior_View_Control",
|
||||
@ -22840,8 +22909,19 @@
|
||||
"ArchAi3D_SEGS_Mask_Irregularity",
|
||||
"ArchAi3D_SEGS_To_Bundle",
|
||||
"ArchAi3D_Save_Image",
|
||||
"ArchAi3D_Simple_Blend_Mask",
|
||||
"ArchAi3D_Simple_Blend_Mask_Batch",
|
||||
"ArchAi3D_Simple_Edge_Mask",
|
||||
"ArchAi3D_Simple_Position_Prompt",
|
||||
"ArchAi3D_Simple_Tile_Compositor",
|
||||
"ArchAi3D_Simple_Tile_Compositor_Single",
|
||||
"ArchAi3D_Simple_Tile_Cropper",
|
||||
"ArchAi3D_Simple_Tile_Cropper_Batch",
|
||||
"ArchAi3D_Simple_Tile_Sampler",
|
||||
"ArchAi3D_Smart_Tile_Calculator",
|
||||
"ArchAi3D_Smart_Tile_Calculator_V3",
|
||||
"ArchAi3D_Smart_Tile_Calculator_V4",
|
||||
"ArchAi3D_Smart_Tile_Calculator_V5",
|
||||
"ArchAi3D_Smart_Tile_Conditioning",
|
||||
"ArchAi3D_Smart_Tile_Detailer",
|
||||
"ArchAi3D_Smart_Tile_Merger",
|
||||
@ -22850,11 +22930,29 @@
|
||||
"ArchAi3D_Smart_Tile_SEGS",
|
||||
"ArchAi3D_Smart_Tile_SEGS_Blur",
|
||||
"ArchAi3D_Smart_Tile_Sampler",
|
||||
"ArchAi3D_Smart_Tile_Solver_V6",
|
||||
"ArchAi3D_Smart_Tile_Solver_V6_2",
|
||||
"ArchAi3D_Smart_USDU_DiffDiff_ControlNet",
|
||||
"ArchAi3D_Smart_USDU_DiffDiff_ControlNet_CustomSample",
|
||||
"ArchAi3D_Smart_USDU_DiffDiff_ControlNet_NoUpscale",
|
||||
"ArchAi3D_Smart_USDU_DiffDiffusion",
|
||||
"ArchAi3D_Smart_USDU_DiffDiffusion_CustomSample",
|
||||
"ArchAi3D_Smart_USDU_DiffDiffusion_NoUpscale",
|
||||
"ArchAi3D_Smart_USDU_Mask_Denoise",
|
||||
"ArchAi3D_Smart_USDU_Split_Latent",
|
||||
"ArchAi3D_Smart_USDU_Universal",
|
||||
"ArchAi3D_Smart_USDU_Universal_CustomSample",
|
||||
"ArchAi3D_Smart_USDU_Universal_NoUpscale",
|
||||
"ArchAi3D_Smart_USDU_Universal_NoUpscale_V2",
|
||||
"ArchAi3D_Smart_USDU_Universal_NoUpscale_V3",
|
||||
"ArchAi3D_Smart_USDU_Universal_NoUpscale_V3_Standalone",
|
||||
"ArchAi3D_Smart_USDU_V3_Standalone",
|
||||
"ArchAi3D_Smart_Ultimate_SD_Upscale",
|
||||
"ArchAi3D_Smart_Ultimate_SD_Upscale_CustomSample",
|
||||
"ArchAi3D_Smart_Ultimate_SD_Upscale_NoUpscale",
|
||||
"ArchAi3D_Solid_Color_Image",
|
||||
"ArchAi3D_String_Input",
|
||||
"ArchAi3D_USDU_EdgeRepair",
|
||||
"ArchAi3dQwenEncoderSimpleV2"
|
||||
],
|
||||
{
|
||||
@ -23211,6 +23309,14 @@
|
||||
"title_aux": "ComfyUI Prompt History Node"
|
||||
}
|
||||
],
|
||||
"https://github.com/aria1th/ComfyUI-Wildcards-rework": [
|
||||
[
|
||||
"TextWildcards"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Wildcards-rework"
|
||||
}
|
||||
],
|
||||
"https://github.com/arthurtravers/ComfyUI-VideoOutputBridge": [
|
||||
[
|
||||
"VideoOutputBridge"
|
||||
@ -23336,6 +23442,14 @@
|
||||
"title_aux": "comfyui-find-perfect-resolution"
|
||||
}
|
||||
],
|
||||
"https://github.com/aslanxie/comfyui_qwen_image_edit": [
|
||||
[
|
||||
"QWen Image Edit"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui_qwen_image_edit"
|
||||
}
|
||||
],
|
||||
"https://github.com/asutermo/ComfyUI-Flux-TryOff": [
|
||||
[
|
||||
"TryOffFluxFillModelNode",
|
||||
@ -26519,6 +26633,7 @@
|
||||
"IndexTTS2EmotionAudioNode",
|
||||
"IndexTTS2EmotionTextNode",
|
||||
"IndexTTS2EmotionVectorNode",
|
||||
"IndexTTS2ProNode",
|
||||
"IndexTTSNode",
|
||||
"IndexTTSProNode",
|
||||
"NovelTextStructureNode",
|
||||
@ -27446,11 +27561,19 @@
|
||||
],
|
||||
"https://github.com/ckinpdx/ComfyUI-SCAIL-AudioReactive": [
|
||||
[
|
||||
"SCAILAISTBeatDance",
|
||||
"SCAILAISTChunkPreview",
|
||||
"SCAILAISTFullLoader",
|
||||
"SCAILAISTFullSequence",
|
||||
"SCAILAISTLibraryLoader",
|
||||
"SCAILAlignPoseToReference",
|
||||
"SCAILAudioFeatureExtractor",
|
||||
"SCAILBasePoseGenerator",
|
||||
"SCAILBeatDetector",
|
||||
"SCAILBeatDrivenPose",
|
||||
"SCAILCMULibraryLoader",
|
||||
"SCAILCMUMotion",
|
||||
"SCAILCMUSequenceToSCAILPose",
|
||||
"SCAILPoseFromDWPose",
|
||||
"SCAILPoseRenderer"
|
||||
],
|
||||
@ -28076,6 +28199,7 @@
|
||||
"ReplaceVideoLatentFrames",
|
||||
"RescaleCFG",
|
||||
"ResizeAndPadImage",
|
||||
"ResolutionBucket",
|
||||
"Rodin3D_Detail",
|
||||
"Rodin3D_Gen2",
|
||||
"Rodin3D_Regular",
|
||||
@ -29144,6 +29268,15 @@
|
||||
"title_aux": "ComfyUI-TTS"
|
||||
}
|
||||
],
|
||||
"https://github.com/danieljanata/ComfyUI-QwenVL-Override": [
|
||||
[
|
||||
"AILab_QwenVL_Override",
|
||||
"AILab_QwenVL_Override_Advanced"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-QwenVL-Override"
|
||||
}
|
||||
],
|
||||
"https://github.com/darkamenosa/comfy_inpaint_blend": [
|
||||
[
|
||||
"EnhancedImageCompositeMasked"
|
||||
@ -30219,6 +30352,12 @@
|
||||
"ClaudeTokenCounter",
|
||||
"ClaudeUsageStats",
|
||||
"ClaudeVisionAnalysis",
|
||||
"ERPK Remove Background (BiRefNet)",
|
||||
"ERPK Remove Background (InSPyReNet)",
|
||||
"ERPK Remove Background (rembg)",
|
||||
"ERPK SHARP Predict",
|
||||
"ERPK SHARP Render Video",
|
||||
"ERPK SHARP Render Views",
|
||||
"GeminiAPIConfig",
|
||||
"GeminiChat",
|
||||
"GeminiImageEdit",
|
||||
@ -31611,14 +31750,6 @@
|
||||
"title_aux": "ComfyUI-hvBlockswap"
|
||||
}
|
||||
],
|
||||
"https://github.com/flybirdxx/ComfyUI-Prompt_Helper": [
|
||||
[
|
||||
"QwenImageEngineer"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Prompt_Helper"
|
||||
}
|
||||
],
|
||||
"https://github.com/flybirdxx/ComfyUI-RexOmni": [
|
||||
[
|
||||
"RexOmniDetector",
|
||||
@ -32111,6 +32242,18 @@
|
||||
"title_aux": "comfyui-customselector"
|
||||
}
|
||||
],
|
||||
"https://github.com/gateway/ComfyUI-Kie-API": [
|
||||
[
|
||||
"KIE_GetRemainingCredits",
|
||||
"KIE_NanoBananaPro_Image",
|
||||
"KIE_Seedream45_Edit",
|
||||
"KIE_Seedream45_TextToImage",
|
||||
"SteveHelloNode"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Kie-API"
|
||||
}
|
||||
],
|
||||
"https://github.com/gelasdev/ComfyUI-FLUX-BFL-API": [
|
||||
[
|
||||
"FluxConfig_BFL",
|
||||
@ -32179,7 +32322,7 @@
|
||||
"FormattedString",
|
||||
"JSONOutputList",
|
||||
"KSamplerImmediateSave",
|
||||
"LoadFile",
|
||||
"LoadAnyFile",
|
||||
"NumberOutputList",
|
||||
"SpreadsheetOutputList",
|
||||
"StringOutputList",
|
||||
@ -34022,10 +34165,10 @@
|
||||
"sort_list_string",
|
||||
"steg_alpha_embed",
|
||||
"steg_alpha_extract",
|
||||
"steg_rgb_embed",
|
||||
"steg_rgb_extract",
|
||||
"string_clear_if_contains",
|
||||
"video_audio_concat",
|
||||
"video_dir_combiner",
|
||||
"video_dir_combiner_ultra",
|
||||
"video_mute_from_url",
|
||||
"video_scene_splitter"
|
||||
@ -34660,10 +34803,13 @@
|
||||
],
|
||||
"https://github.com/illuminatianon/comfyui-lumi-tools": [
|
||||
[
|
||||
"LumiLLMPromptProcessor",
|
||||
"LumiOpenRouterProvider",
|
||||
"LumiSeed",
|
||||
"LumiShowText",
|
||||
"LumiShufflePrompt",
|
||||
"LumiWildcardProcessor"
|
||||
"LumiWildcardProcessor",
|
||||
"LumiWrapText"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-lumi-tools"
|
||||
@ -37454,6 +37600,7 @@
|
||||
"HuMoEmbeds",
|
||||
"LandmarksToImage",
|
||||
"LoadLynxResampler",
|
||||
"LoadNLFModel",
|
||||
"LoadVQVAE",
|
||||
"LoadWanVideoClipTextEncoder",
|
||||
"LoadWanVideoT5TextEncoder",
|
||||
@ -38293,6 +38440,15 @@
|
||||
"title_aux": "Google Photos Loader - by PabloGFX"
|
||||
}
|
||||
],
|
||||
"https://github.com/lazyq666/gemini-3-simply-comfyui": [
|
||||
[
|
||||
"Gemini3ProImagePreview",
|
||||
"Gemini3ProPreviewText"
|
||||
],
|
||||
{
|
||||
"title_aux": "gemini-3-simply-comfyui"
|
||||
}
|
||||
],
|
||||
"https://github.com/lc03lc/Comfyui_OmniConsistency": [
|
||||
[
|
||||
"Comfyui_OmniConsistency"
|
||||
@ -43127,6 +43283,15 @@
|
||||
"title_aux": "ComfyUI-WhisperXX"
|
||||
}
|
||||
],
|
||||
"https://github.com/okdalto/ComfyUI-PersonaLive": [
|
||||
[
|
||||
"PersonaLiveCheckpointLoader",
|
||||
"PersonaLivePhotoSampler"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-PersonaLive"
|
||||
}
|
||||
],
|
||||
"https://github.com/okdalto/ComfyUI-WithAnyone": [
|
||||
[
|
||||
"WithAnyoneArcFaceExtractorNode",
|
||||
@ -44789,7 +44954,9 @@
|
||||
"PVL_Google_NanoBanana_API_mandatory_IMG",
|
||||
"PVL_Google_NanoBanana_Multi_API",
|
||||
"PVL_Google_NanoBanana_PRO_Multi_API",
|
||||
"PVL_ImageBatchToImageList",
|
||||
"PVL_ImageComposite",
|
||||
"PVL_ImageListToImageBatch",
|
||||
"PVL_ImageResize",
|
||||
"PVL_ImageStitch",
|
||||
"PVL_Image_Translation_Offset",
|
||||
@ -45177,6 +45344,71 @@
|
||||
"title_aux": "Mflux-ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/razvanmatei-sf/comfyui-stillfront": [
|
||||
[
|
||||
"SFLLMChat",
|
||||
"SFPromptList",
|
||||
"SFQwenResolution",
|
||||
"SFVertexAIImagen3TextToImage",
|
||||
"SFVertexAIImagen4TextToImage",
|
||||
"SFVertexAIImagen4Upscale",
|
||||
"SFVertexAINanaBananaPro",
|
||||
"SFVertexAINanaBananaProEdit",
|
||||
"SFVertexAIVeo31ImageToVideo",
|
||||
"SFVertexAIVeo31TextToVideo",
|
||||
"SFWaveSpeedClient",
|
||||
"SFWaveSpeedFluxControlNetUnionPro2",
|
||||
"SFWaveSpeedFluxKontextDev",
|
||||
"SFWaveSpeedFluxKontextMax",
|
||||
"SFWaveSpeedFluxKontextPro",
|
||||
"SFWaveSpeedImageUpscaler",
|
||||
"SFWaveSpeedInfiniteTalk",
|
||||
"SFWaveSpeedInfiniteTalkMulti",
|
||||
"SFWaveSpeedNanoBananaEdit",
|
||||
"SFWaveSpeedNanoBananaProEdit",
|
||||
"SFWaveSpeedNanoBananaProEditMulti",
|
||||
"SFWaveSpeedNanoBananaProEditUltra",
|
||||
"SFWaveSpeedNanoBananaProTextToImage",
|
||||
"SFWaveSpeedNanoBananaProTextToImageMulti",
|
||||
"SFWaveSpeedNanoBananaProTextToImageUltra",
|
||||
"SFWaveSpeedNanoBananaTextToImage",
|
||||
"SFWaveSpeedQwenEdit",
|
||||
"SFWaveSpeedQwenEditLora",
|
||||
"SFWaveSpeedQwenEditPlus",
|
||||
"SFWaveSpeedQwenEditPlusLora",
|
||||
"SFWaveSpeedQwenTextToImage",
|
||||
"SFWaveSpeedQwenTextToImageLora",
|
||||
"SFWaveSpeedRunwayUpscale",
|
||||
"SFWaveSpeedSeedreamV4",
|
||||
"SFWaveSpeedSeedreamV4Edit",
|
||||
"SFWaveSpeedSeedreamV4EditSequential",
|
||||
"SFWaveSpeedSeedreamV4Sequential",
|
||||
"SFWaveSpeedSora2ImageToVideo",
|
||||
"SFWaveSpeedSora2ImageToVideoPro",
|
||||
"SFWaveSpeedSora2TextToVideo",
|
||||
"SFWaveSpeedSora2TextToVideoPro",
|
||||
"SFWaveSpeedVeo31FastImageToVideo",
|
||||
"SFWaveSpeedVeo31FastTextToVideo",
|
||||
"SFWaveSpeedVeo31ImageToVideo",
|
||||
"SFWaveSpeedVeo31ReferenceToVideo",
|
||||
"SFWaveSpeedVeo31TextToVideo",
|
||||
"SFWaveSpeedWan22Animate",
|
||||
"SFWaveSpeedWan22I2V720p",
|
||||
"SFWaveSpeedWan25ImageEdit",
|
||||
"SFWaveSpeedWan25ImageToVideo",
|
||||
"SFWaveSpeedWan25ImageToVideoFast",
|
||||
"SFWaveSpeedWan25TextToImage",
|
||||
"SFWaveSpeedWan25TextToVideo",
|
||||
"SFWaveSpeedWan25TextToVideoFast",
|
||||
"WaveSpeedAI Qwen Image Text to Image",
|
||||
"WaveSpeedAI Qwen Image Text to Image LoRA",
|
||||
"WaveSpeedAI_RunwaymlUpscaleV1Node",
|
||||
"WaveSpeedAI_Wan22I2V720pNode"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-stillfront"
|
||||
}
|
||||
],
|
||||
"https://github.com/razvanmatei-sf/razv-llm": [
|
||||
[
|
||||
"RazvLLMChat"
|
||||
@ -49653,10 +49885,12 @@
|
||||
"FullPipeIn",
|
||||
"FullPipeLoader",
|
||||
"FullPipeOut",
|
||||
"LoaderFullPipe",
|
||||
"ModelPresetNode",
|
||||
"MultiStringConditioning",
|
||||
"PromptConditioningNode",
|
||||
"ResolutionSelector",
|
||||
"SaveFullPipe",
|
||||
"SeedWithOverride",
|
||||
"StylePresetNode",
|
||||
"TagReplacementNode",
|
||||
@ -49797,6 +50031,7 @@
|
||||
"TALoadDiffusionModelWithName",
|
||||
"TALoadGGUFModelWithName",
|
||||
"TAPromptController",
|
||||
"TASaveImageWithPrompt",
|
||||
"ta_captioning"
|
||||
],
|
||||
{
|
||||
@ -49907,6 +50142,7 @@
|
||||
],
|
||||
"https://github.com/tppp2806/ComfyUI-YoloTrack": [
|
||||
[
|
||||
"MaskCropExtractNode",
|
||||
"YOLODetectionNode",
|
||||
"YOLOTrackingNode"
|
||||
],
|
||||
@ -50205,7 +50441,9 @@
|
||||
"DyPEQwenImage",
|
||||
"FlowMatchingProgressiveUpscaler",
|
||||
"FlowMatchingStage",
|
||||
"LatentChannelStatsPreview"
|
||||
"ImageMeshDrag",
|
||||
"LatentChannelStatsPreview",
|
||||
"LatentMeshDrag"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-FlowMatching-Upscaler"
|
||||
@ -50967,6 +51205,8 @@
|
||||
"VRGDG_MusicVideoPromptCreatorV3",
|
||||
"VRGDG_PostRunIndexStepper",
|
||||
"VRGDG_PromptSplitter",
|
||||
"VRGDG_PromptSplitter4",
|
||||
"VRGDG_PromptSplitterForFMML",
|
||||
"VRGDG_PromptSplitterForManual",
|
||||
"VRGDG_PromptSplitterJson",
|
||||
"VRGDG_PromptSplitterV2",
|
||||
@ -52656,6 +52896,7 @@
|
||||
"YC_ShowText",
|
||||
"ycBBoxBridge",
|
||||
"ycCanvasBBox",
|
||||
"ycCanvasBBoxMask",
|
||||
"ycimagebrushmask"
|
||||
],
|
||||
{
|
||||
|
||||
@ -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.38.3"
|
||||
version = "3.39"
|
||||
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