mirror of
https://github.com/Comfy-Org/ComfyUI-Manager.git
synced 2026-01-26 22:10:15 +08:00
Compare commits
12 Commits
1d305aad33
...
ef5ad43f3a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ef5ad43f3a | ||
|
|
c7f03ad64e | ||
|
|
1232989d7d | ||
|
|
8f66a7997f | ||
|
|
f2a05b096f | ||
|
|
9b6b0676e1 | ||
|
|
5e2ca4fe1a | ||
|
|
975642c9bf | ||
|
|
76fd32f146 | ||
|
|
3ae99bc761 | ||
|
|
1dde3c3ef0 | ||
|
|
457c93cd19 |
@ -3325,6 +3325,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Mel-Band RoFormer for Music Source Separation"
|
||||
},
|
||||
{
|
||||
"author": "kijai",
|
||||
"title": "ComfyUI-SCAIL-Pose",
|
||||
"reference": "https://github.com/kijai/ComfyUI-SCAIL-Pose",
|
||||
"files": [
|
||||
"https://github.com/kijai/ComfyUI-SCAIL-Pose"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes for SCAIL input processing"
|
||||
},
|
||||
{
|
||||
"author": "hhhzzyang",
|
||||
"title": "Comfyui-Lama",
|
||||
@ -13708,6 +13718,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "You'll get a new node called SD3 Latent Select Resolution, you can pick the x and y sizes from a list."
|
||||
},
|
||||
{
|
||||
"author": "GavChap",
|
||||
"title": "ComfyUI_ExtractLora",
|
||||
"reference": "https://github.com/GavChap/ComfyUI_ExtractLora",
|
||||
"files": [
|
||||
"https://github.com/GavChap/ComfyUI_ExtractLora"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Creates lora from two checkpoints by extracting the difference."
|
||||
},
|
||||
{
|
||||
"author": "BenNarum",
|
||||
"title": "SigmaWaveFormNodes",
|
||||
@ -21830,6 +21850,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom node for ComfyUI that integrates Video-As-Prompt for motion-guided video generation from image inputs."
|
||||
},
|
||||
{
|
||||
"author": "HM-RunningHub",
|
||||
"title": "ComfyUI_RH_QwenImageI2L",
|
||||
"reference": "https://github.com/HM-RunningHub/ComfyUI_RH_QwenImageI2L",
|
||||
"files": [
|
||||
"https://github.com/HM-RunningHub/ComfyUI_RH_QwenImageI2L"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node that generates Image-to-LoRA (I2L) LoRA from training images using DiffSynth-Studio Qwen-Image i2L pipelines."
|
||||
},
|
||||
{
|
||||
"author": "wqjuser",
|
||||
"title": "ComfyUI-Chat-Image",
|
||||
@ -27483,6 +27513,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom ComfyUI node for integrating with the Fal Kontext API for advanced image editing and generation."
|
||||
},
|
||||
{
|
||||
"author": "SanDiegoDude",
|
||||
"title": "SCG_LocalVLM",
|
||||
"reference": "https://github.com/SanDiegoDude/SCG_LocalVLM",
|
||||
"files": [
|
||||
"https://github.com/SanDiegoDude/SCG_LocalVLM"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This is an implementation of [Qwen3-VL](https://github.com/QwenLM/Qwen3-VL) for [ComfyUI](https://github.com/comfyanonymous/ComfyUI), which supports for text-based and single-image queries."
|
||||
},
|
||||
{
|
||||
"author": "tavyra",
|
||||
"title": "ComfyUI_Curves",
|
||||
@ -32125,6 +32165,16 @@
|
||||
"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",
|
||||
@ -34090,6 +34140,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Remove background scenery from an image of a person. The output image is saved as an RGBA PNG. The alpha channel is included."
|
||||
},
|
||||
{
|
||||
"author": "Sean-Bradley",
|
||||
"title": "ComfyUI-Get-Line",
|
||||
"reference": "https://github.com/Sean-Bradley/ComfyUI-Get-Line",
|
||||
"files": [
|
||||
"https://github.com/Sean-Bradley/ComfyUI-Get-Line"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node used to get one line of string from a multi line string. Search in the manager for `get line`, or `getline` or `get-line`."
|
||||
},
|
||||
{
|
||||
"author": "LukeCoulson1",
|
||||
"title": "ComfyUI LoRA Combine Node",
|
||||
@ -34778,6 +34838,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "View Image Metadata of ComfyUI as well as of ForgeUI or Automatic 1111 generated images in Easily Readable Format"
|
||||
},
|
||||
{
|
||||
"author": "ShammiG",
|
||||
"title": "ComfyUI-Show_Any_Text_in_CMD_Console-SG",
|
||||
"reference": "https://github.com/ShammiG/ComfyUI-Show_Any_Text_in_CMD_Console-SG",
|
||||
"files": [
|
||||
"https://github.com/ShammiG/ComfyUI-Show_Any_Text_in_CMD_Console-SG"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Simple node to show ANY output text in the CMD console with color options"
|
||||
},
|
||||
{
|
||||
"author": "bgreene2",
|
||||
"title": "ComfyUI-Hunyuan-Image-3",
|
||||
@ -38146,6 +38216,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom node for building keyframe timelines in Wan video generation with adjustable influence strength, supporting 1-8 keyframes. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "ckinpdx",
|
||||
"title": "comfyui-humo-audio-motion",
|
||||
"reference": "https://github.com/ckinpdx/comfyui-humo-audio-motion",
|
||||
"files": [
|
||||
"https://github.com/ckinpdx/comfyui-humo-audio-motion"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node for granular Q/K/V/O attention boosting in HuMo models. Provides 12 independent controls for fine-tuning audio-driven motion response."
|
||||
},
|
||||
{
|
||||
"author": "jessesep",
|
||||
"title": "SimpleVariables",
|
||||
@ -38669,7 +38749,36 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Comprehensive set of ComfyUI custom nodes for interacting with a Sora-compatible REST API, supporting text-to-video, image-to-video, and video-to-video generation."
|
||||
},
|
||||
|
||||
{
|
||||
"author": "logicalor",
|
||||
"title": "comfyui_text_to_pose",
|
||||
"reference": "https://github.com/logicalor/comfyui_text_to_pose",
|
||||
"files": [
|
||||
"https://github.com/logicalor/comfyui_text_to_pose"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Generate human poses from text descriptions using T2P Transformer for ControlNet/T2I-Adapter workflows"
|
||||
},
|
||||
{
|
||||
"author": "ssspace1",
|
||||
"title": "SSpack_ComfyUI",
|
||||
"reference": "https://github.com/ssspace1/SSpack_ComfyUI",
|
||||
"files": [
|
||||
"https://github.com/ssspace1/SSpack_ComfyUI"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Compact, UI-friendly nodes for ComfyUI with LoRA/checkpoint selectors with thumbnails, text utilities, image helpers, and a lightweight cache cleaner script."
|
||||
},
|
||||
{
|
||||
"author": "SofianeAlla",
|
||||
"title": "ComfyUI-BespokeAI-3D",
|
||||
"reference": "https://github.com/SofianeAlla/ComfyUI-BespokeAI-3D",
|
||||
"files": [
|
||||
"https://github.com/SofianeAlla/ComfyUI-BespokeAI-3D"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for BespokeAI image-to-3D generation\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
@ -2250,6 +2250,7 @@
|
||||
"ForceDetectPixelateScale",
|
||||
"ImageScaleDownByFactor",
|
||||
"ImageUpscaleByInt",
|
||||
"ImagesToRGB",
|
||||
"NearestImageScaleDown",
|
||||
"PixelUpscale2Target",
|
||||
"RemoveBackgroundPixel",
|
||||
@ -2934,6 +2935,7 @@
|
||||
"https://github.com/Aryan185/ComfyUI-VertexAPI": [
|
||||
[
|
||||
"GeminiChatVertexNode",
|
||||
"GeminiDiarisationNode",
|
||||
"GeminiSegmentationVertexNode",
|
||||
"GeminiTTSVertexNode",
|
||||
"GoogleImagenEditNode",
|
||||
@ -7965,6 +7967,14 @@
|
||||
"title_aux": "ComfyUI-SD3LatentSelectRes"
|
||||
}
|
||||
],
|
||||
"https://github.com/GavChap/ComfyUI_ExtractLora": [
|
||||
[
|
||||
"ExtractLoRA"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_ExtractLora"
|
||||
}
|
||||
],
|
||||
"https://github.com/GeekatplayStudio/ComfyUI-Text2Speech": [
|
||||
[
|
||||
"HttpTTSToAudio",
|
||||
@ -8529,6 +8539,16 @@
|
||||
"title_aux": "ComfyUI Ovi Node"
|
||||
}
|
||||
],
|
||||
"https://github.com/HM-RunningHub/ComfyUI_RH_QwenImageI2L": [
|
||||
[
|
||||
"RunningHub_ImageQwenI2L_Loader(CFB)",
|
||||
"RunningHub_ImageQwenI2L_Loader(Style)",
|
||||
"RunningHub_ImageQwenI2L_LoraGenerator"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_RH_QwenImageI2L"
|
||||
}
|
||||
],
|
||||
"https://github.com/HM-RunningHub/ComfyUI_RH_SeedXPro": [
|
||||
[
|
||||
"RunningHub SeedXPro Translator"
|
||||
@ -11259,7 +11279,6 @@
|
||||
"LG_InstallDependencies",
|
||||
"LG_LatentBatchToList",
|
||||
"LG_LoadImage",
|
||||
"LG_LoadImage_V2",
|
||||
"LG_MaskBatchMerge",
|
||||
"LG_MaskHoleFiller",
|
||||
"LG_Noise",
|
||||
@ -11378,6 +11397,7 @@
|
||||
"Texturaizer_ApplyStyleToPrompt",
|
||||
"Texturaizer_CachedCNLoader",
|
||||
"Texturaizer_CachedCheckpointLoader",
|
||||
"Texturaizer_CircularVAEDecode",
|
||||
"Texturaizer_ClipEncodeSwitchVersion",
|
||||
"Texturaizer_CombinedConditioningFromColors",
|
||||
"Texturaizer_ExtractCNData",
|
||||
@ -11402,11 +11422,13 @@
|
||||
"Texturaizer_KSamplerAdvanced",
|
||||
"Texturaizer_Placeholder",
|
||||
"Texturaizer_PowerLoraLoader",
|
||||
"Texturaizer_SeamlessTilingPatch",
|
||||
"Texturaizer_SendImage",
|
||||
"Texturaizer_SetGlobalDir",
|
||||
"Texturaizer_SigmasSelector",
|
||||
"Texturaizer_SwitchAny",
|
||||
"Texturaizer_SwitchLazy",
|
||||
"Texturaizer_SwitchSmart",
|
||||
"Texturaizer_UseSDXL"
|
||||
],
|
||||
{
|
||||
@ -14612,6 +14634,7 @@
|
||||
],
|
||||
"https://github.com/PozzettiAndrea/ComfyUI-GeometryPack": [
|
||||
[
|
||||
"GeomPackAddNormalsToPointCloud",
|
||||
"GeomPackBackdraftView",
|
||||
"GeomPackBooleanOp",
|
||||
"GeomPackCheckNormals",
|
||||
@ -14637,6 +14660,7 @@
|
||||
"GeomPackMeshQuality",
|
||||
"GeomPackMeshToMeshDistance",
|
||||
"GeomPackMeshToPointCloud",
|
||||
"GeomPackNormalizeMeshToBBox",
|
||||
"GeomPackPointToMeshDistance",
|
||||
"GeomPackPreviewMesh",
|
||||
"GeomPackPreviewMeshDual",
|
||||
@ -15323,6 +15347,7 @@
|
||||
"Runware Alibaba Provider Settings",
|
||||
"Runware Audio Inference",
|
||||
"Runware Audio Inference Inputs",
|
||||
"Runware Audio Inputs Combine",
|
||||
"Runware Audio Model Search",
|
||||
"Runware Audio Sections",
|
||||
"Runware Background Removal",
|
||||
@ -15365,20 +15390,27 @@
|
||||
"Runware Refiner",
|
||||
"Runware Runway Provider Settings",
|
||||
"Runware Safety Inputs",
|
||||
"Runware Speech Inputs Combine",
|
||||
"Runware Sync Provider Settings",
|
||||
"Runware Sync Segment",
|
||||
"Runware VAE Search",
|
||||
"Runware Vectorize",
|
||||
"Runware Video Advanced Feature Inputs",
|
||||
"Runware Video Audio Input",
|
||||
"Runware Video Background Removal",
|
||||
"Runware Video Inference",
|
||||
"Runware Video Inference Inputs",
|
||||
"Runware Video Inputs Frame Images",
|
||||
"Runware Video Inputs References",
|
||||
"Runware Video Model Search",
|
||||
"Runware Video Speech Input",
|
||||
"Runware Video Transcription",
|
||||
"Runware Video Upscaler",
|
||||
"Runware Vidu Provider Settings",
|
||||
"RunwareAlibabaProviderSettings",
|
||||
"RunwareAudioInferenceInputs",
|
||||
"RunwareAudioInput",
|
||||
"RunwareAudioInputCombine",
|
||||
"RunwareBriaProviderSettings",
|
||||
"RunwareBytedanceProviderSettings",
|
||||
"RunwareFrameImages",
|
||||
@ -15391,6 +15423,10 @@
|
||||
"RunwarePixverseProviderSettings",
|
||||
"RunwareRunwayProviderSettings",
|
||||
"RunwareSafetyInputs",
|
||||
"RunwareSpeechInput",
|
||||
"RunwareSpeechInputCombine",
|
||||
"RunwareSyncProviderSettings",
|
||||
"RunwareSyncSegment",
|
||||
"RunwareVectorize",
|
||||
"RunwareVideoAdvancedFeatureInputs",
|
||||
"RunwareVideoBgRemoval",
|
||||
@ -15849,6 +15885,17 @@
|
||||
"title_aux": "ComfyUI-SaveAudioMP3"
|
||||
}
|
||||
],
|
||||
"https://github.com/SanDiegoDude/SCG_LocalVLM": [
|
||||
[
|
||||
"Qwen",
|
||||
"Qwen2.5",
|
||||
"Qwen2.5VL",
|
||||
"QwenVL"
|
||||
],
|
||||
{
|
||||
"title_aux": "SCG_LocalVLM"
|
||||
}
|
||||
],
|
||||
"https://github.com/Santat2023/ComfyUiRagNodes": [
|
||||
[
|
||||
"MyNodesForDB",
|
||||
@ -16046,6 +16093,14 @@
|
||||
"title_aux": "ComfyUI-Long-CLIP"
|
||||
}
|
||||
],
|
||||
"https://github.com/Sean-Bradley/ComfyUI-Get-Line": [
|
||||
[
|
||||
"Get Line"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Get-Line"
|
||||
}
|
||||
],
|
||||
"https://github.com/Sean-Bradley/ComfyUI-Image-Compare": [
|
||||
[
|
||||
"ImageCompareNode"
|
||||
@ -16308,6 +16363,14 @@
|
||||
"title_aux": "ComfyUI Show Clock in CMD Console SG"
|
||||
}
|
||||
],
|
||||
"https://github.com/ShammiG/ComfyUI-Show_Any_Text_in_CMD_Console-SG": [
|
||||
[
|
||||
"ShowAnyTextInCMDconsoleSG"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Show_Any_Text_in_CMD_Console-SG"
|
||||
}
|
||||
],
|
||||
"https://github.com/ShammiG/ComfyUI-Simple_Readable_Metadata-SG": [
|
||||
[
|
||||
"Simple Readable Metadata Text Viewer-SG",
|
||||
@ -17009,6 +17072,16 @@
|
||||
"title_aux": "JPG & Noise Remover for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/SofianeAlla/ComfyUI-BespokeAI-3D": [
|
||||
[
|
||||
"BespokeAI3DGeneration",
|
||||
"BespokeAI3DGenerationFromURL",
|
||||
"BespokeAI3DPreview"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-BespokeAI-3D"
|
||||
}
|
||||
],
|
||||
"https://github.com/SoftMeng/ComfyUI-DeepCache-Fix": [
|
||||
[
|
||||
"DeepCache_Fix"
|
||||
@ -17689,6 +17762,7 @@
|
||||
"StarIconExporter",
|
||||
"StarImageEditQwenKontext",
|
||||
"StarImageLoader1by1",
|
||||
"StarImageLoop",
|
||||
"StarImageSwitch",
|
||||
"StarImageSwitch2",
|
||||
"StarInfiniteYouAdvancedPatchMaker",
|
||||
@ -17734,6 +17808,7 @@
|
||||
"StarTextFilter",
|
||||
"StarTextInput",
|
||||
"StarTextStorage",
|
||||
"StarVideoLoop",
|
||||
"StarWatermark",
|
||||
"StarWildcardsAdvanced",
|
||||
"StarWildsAdv",
|
||||
@ -22076,6 +22151,7 @@
|
||||
"AKSamplerSettings",
|
||||
"AKSettingsOut",
|
||||
"CLIPEncodeMultiple",
|
||||
"CLIPTextEncodeCached",
|
||||
"IndexMultiple",
|
||||
"IsOneOfGroupsActive",
|
||||
"PreviewRawText",
|
||||
@ -22169,6 +22245,7 @@
|
||||
[
|
||||
"AF_Edit_Generated_Prompt",
|
||||
"AF_Load_Prompt_History",
|
||||
"AF_Model_Switch",
|
||||
"AF_Save_Prompt_History",
|
||||
"AF_Show_Text"
|
||||
],
|
||||
@ -25668,6 +25745,7 @@
|
||||
[
|
||||
"Cubemap Faces Extract",
|
||||
"Cubemap To Equirectangular",
|
||||
"Cubemap To Equirectangular (Flexible)",
|
||||
"Equirectangular Crop 180",
|
||||
"Equirectangular Crop Square",
|
||||
"Equirectangular Edge Blender",
|
||||
@ -25678,6 +25756,15 @@
|
||||
"Equirectangular Rotate",
|
||||
"Equirectangular Rotate Preset",
|
||||
"Equirectangular To Cubemap",
|
||||
"Equirectangular To Cubemap (Flexible)",
|
||||
"LatLong Apply Circular Padding Model",
|
||||
"LatLong Apply Circular Padding VAE",
|
||||
"LatLong Create Pole Mask",
|
||||
"LatLong Create Seam Mask",
|
||||
"LatLong Roll Image",
|
||||
"LatLong Roll Mask",
|
||||
"LatLong Split Cubemap Faces",
|
||||
"LatLong Stack Cubemap Faces",
|
||||
"PanoramaVideoViewerNode",
|
||||
"PanoramaViewerNode"
|
||||
],
|
||||
@ -27301,6 +27388,15 @@
|
||||
"title_aux": "ComfyUI-WanKeyframeBuilder"
|
||||
}
|
||||
],
|
||||
"https://github.com/ckinpdx/comfyui-humo-audio-motion": [
|
||||
[
|
||||
"HuMoAudioAttentionControlV4",
|
||||
"HuMoLipsyncSuppressAttn"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-humo-audio-motion"
|
||||
}
|
||||
],
|
||||
"https://github.com/claptrap0/ComfyUI_LLM_Hub": [
|
||||
[
|
||||
"Generated_Output",
|
||||
@ -30896,7 +30992,8 @@
|
||||
"MeuxAdvancedImageCrop",
|
||||
"MeuxImageLoader",
|
||||
"MeuxMultiSaveImage",
|
||||
"MeuxSimpleLLMNode"
|
||||
"MeuxSimpleLLMNode",
|
||||
"MeuxTextAreaInput"
|
||||
],
|
||||
{
|
||||
"title_aux": "BaiduMeux_Comfy Tools"
|
||||
@ -30907,7 +31004,8 @@
|
||||
"MeuxAdvancedImageCrop",
|
||||
"MeuxImageLoader",
|
||||
"MeuxMultiSaveImage",
|
||||
"MeuxSimpleLLMNode"
|
||||
"MeuxSimpleLLMNode",
|
||||
"MeuxTextAreaInput"
|
||||
],
|
||||
{
|
||||
"title_aux": "MultiSaveImage Node"
|
||||
@ -31428,6 +31526,14 @@
|
||||
"title_aux": "ComfyUI-hvBlockswap"
|
||||
}
|
||||
],
|
||||
"https://github.com/flybirdxx/ComfyUI-Prompt_Helper": [
|
||||
[
|
||||
"QwenImageEngineer"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Prompt_Helper"
|
||||
}
|
||||
],
|
||||
"https://github.com/flybirdxx/ComfyUI-RexOmni": [
|
||||
[
|
||||
"RexOmniDetector",
|
||||
@ -36827,6 +36933,7 @@
|
||||
"https://github.com/kijai/ComfyUI-KJNodes": [
|
||||
[
|
||||
"AddLabel",
|
||||
"AddNoiseToTrackPath",
|
||||
"AppendInstanceDiffusionTracking",
|
||||
"AppendStringsToList",
|
||||
"ApplyRifleXRoPE_HunuyanVideo",
|
||||
@ -37201,6 +37308,15 @@
|
||||
"title_aux": "ComfyUI PyramidFlow Wrapper"
|
||||
}
|
||||
],
|
||||
"https://github.com/kijai/ComfyUI-SCAIL-Pose": [
|
||||
[
|
||||
"PoseDetectionVitPoseToDWPose",
|
||||
"RenderNLFPoses"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-SCAIL-Pose"
|
||||
}
|
||||
],
|
||||
"https://github.com/kijai/ComfyUI-SUPIR": [
|
||||
[
|
||||
"SUPIR_Upscale",
|
||||
@ -38992,6 +39108,18 @@
|
||||
"title_aux": "Comfyui_three_js"
|
||||
}
|
||||
],
|
||||
"https://github.com/logicalor/comfyui_text_to_pose": [
|
||||
[
|
||||
"ApplyT2IPoseAdapter",
|
||||
"T2IPoseAdapterLoader",
|
||||
"T2PModelLoader",
|
||||
"TextToPose",
|
||||
"TextToPoseBatch"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui_text_to_pose"
|
||||
}
|
||||
],
|
||||
"https://github.com/logtd/ComfyUI-4DHumans": [
|
||||
[
|
||||
"LoadDetectron",
|
||||
@ -41567,6 +41695,7 @@
|
||||
"https://github.com/morino-kumasan/comfyui-toml-prompt": [
|
||||
[
|
||||
"CheckPointLoaderSimpleFromString",
|
||||
"DropFirstImage",
|
||||
"IntSelector",
|
||||
"JsonExtractFloat",
|
||||
"JsonExtractInt",
|
||||
@ -41586,7 +41715,8 @@
|
||||
"StringSelector",
|
||||
"StringViewer",
|
||||
"SummaryReader",
|
||||
"TomlPromptDecode"
|
||||
"TomlPromptDecode",
|
||||
"UNETLoaderFromString"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-toml-prompt"
|
||||
@ -41893,7 +42023,8 @@
|
||||
"ShellAgentPluginSaveAudios",
|
||||
"ShellAgentPluginSaveImage",
|
||||
"ShellAgentPluginSaveImages",
|
||||
"ShellAgentPluginSaveVideoVHS"
|
||||
"ShellAgentPluginSaveVideoVHS",
|
||||
"ShellAgentPluginVideoCombineEncrypt"
|
||||
],
|
||||
{
|
||||
"author": "MyShell",
|
||||
@ -43472,8 +43603,7 @@
|
||||
"RescaleCFGPost",
|
||||
"SamplerGradientEstimation",
|
||||
"SkipFirstStepCFG",
|
||||
"TCFGAdvanced",
|
||||
"VAEPadding"
|
||||
"TCFGAdvanced"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-ppm"
|
||||
@ -48276,6 +48406,26 @@
|
||||
"title_aux": "ComfyUI roop"
|
||||
}
|
||||
],
|
||||
"https://github.com/ssspace1/SSpack_ComfyUI": [
|
||||
[
|
||||
"SSCheckpointLoader",
|
||||
"SSCheckpointSelector",
|
||||
"SSCheckpointSelector12",
|
||||
"SSCheckpointSelector6",
|
||||
"SSFilter",
|
||||
"SSImageNodeAnnotator",
|
||||
"SSJsonOutput",
|
||||
"SSLoRAStackApplier",
|
||||
"SSLoraSelector",
|
||||
"SSRandomLoraApplier",
|
||||
"SSSavedImageLoader",
|
||||
"SSTextWeight",
|
||||
"SS_SDXL_AutoResize"
|
||||
],
|
||||
{
|
||||
"title_aux": "SSpack_ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/stavsap/comfyui-downloader": [
|
||||
[
|
||||
"DownloadSummaryParser",
|
||||
@ -49287,8 +49437,11 @@
|
||||
"FullPipeOut",
|
||||
"ModelPresetNode",
|
||||
"MultiStringConditioning",
|
||||
"ResolutionSelector",
|
||||
"SeedWithOverride",
|
||||
"StylePresetNode",
|
||||
"TagReplacementNode",
|
||||
"UpscaleNode",
|
||||
"WildcardNode"
|
||||
],
|
||||
{
|
||||
|
||||
12230
github-stats-cache.json
12230
github-stats-cache.json
File diff suppressed because it is too large
Load Diff
4771
github-stats.json
4771
github-stats.json
File diff suppressed because it is too large
Load Diff
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: 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,14 +970,16 @@ 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";
|
||||
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)' }, []));
|
||||
|
||||
api.fetchApi('/manager/preview_method')
|
||||
.then(response => response.text())
|
||||
@ -992,10 +989,12 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
api.fetchApi(`/manager/preview_method?value=${event.target.value}`);
|
||||
});
|
||||
|
||||
const previewSetttingItem = createSettingsCombo("Preview method", preview_combo);
|
||||
|
||||
// channel
|
||||
let channel_combo = document.createElement("select");
|
||||
channel_combo.setAttribute("title", "Configure the channel for retrieving data from the Custom Node list (including missing nodes) or the Model list.");
|
||||
channel_combo.className = "cm-menu-combo";
|
||||
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 +1003,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 +1018,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 +1035,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 +1057,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 +1077,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 +1095,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 +1120,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 +1138,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 +1189,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 +1216,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 +1232,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 +1252,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 +1276,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,155 @@
|
||||
{
|
||||
"custom_nodes": [
|
||||
{
|
||||
"author": "Spicely",
|
||||
"title": "[WIP] ComfyUI-Luma",
|
||||
"reference": "https://github.com/Spicely/ComfyUI-Luma",
|
||||
"files": [
|
||||
"https://github.com/Spicely/ComfyUI-Luma"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI utility providing video and audio processing capabilities including text watermarking, audio-video separation, and audio-to-subtitle conversion. (Description by CC)\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "SSYCloud",
|
||||
"title": "comfyui-ssy-syncapi [WIP]",
|
||||
"reference": "https://github.com/SSYCloud/comfyui-ssy-syncapi",
|
||||
"files": [
|
||||
"https://github.com/SSYCloud/comfyui-ssy-syncapi"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Powerful ComfyUI custom node collection providing 4 dedicated nodes to access SSY Cloud synchronous image generation and processing models including Google Gemini, ByteDance Doubao, OpenAI, and image enhancement APIs. (Description by CC)\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "LMietkiewicz",
|
||||
"title": "HiggsfieldAPI_Node",
|
||||
"reference": "https://github.com/LMietkiewicz/HiggsfieldAPI_Node",
|
||||
"files": [
|
||||
"https://github.com/LMietkiewicz/HiggsfieldAPI_Node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node for Higgsfield API integration. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "starsFriday",
|
||||
"title": "ComfyUI-LongCat-Image [WIP]",
|
||||
"reference": "https://github.com/starsFriday/ComfyUI-LongCat-Image",
|
||||
"files": [
|
||||
"https://github.com/starsFriday/ComfyUI-LongCat-Image"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI wrapper nodes for the LongCat-Image text-to-image and image-editing pipelines with Python 3.12 support.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "tardey07",
|
||||
"title": "ComfyUI-PT-TTM",
|
||||
"reference": "https://github.com/tardey07/ComfyUI-PT-TTM",
|
||||
"files": [
|
||||
"https://github.com/tardey07/ComfyUI-PT-TTM"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This application provides a user-friendly interface for easy comfort. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "logicalor",
|
||||
"title": "comfyui_mv_adapter [WIP]",
|
||||
"reference": "https://github.com/logicalor/comfyui_mv_adapter",
|
||||
"files": [
|
||||
"https://github.com/logicalor/comfyui_mv_adapter"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "MV-Adapter nodes for ComfyUI - Multi-view image generation\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "rafstahelin",
|
||||
"title": "ComfyUI_KieNanoBananaPro",
|
||||
"reference": "https://github.com/rafstahelin/ComfyUI_KieNanoBananaPro",
|
||||
"files": [
|
||||
"https://github.com/rafstahelin/ComfyUI_KieNanoBananaPro"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes for processing and filtering using KieNanoBananaPro algorithm. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "jinchanz",
|
||||
"title": "ComfyUI-Midjourney",
|
||||
"reference": "https://github.com/jinchanz/ComfyUI-Midjourney",
|
||||
"files": [
|
||||
"https://github.com/jinchanz/ComfyUI-Midjourney"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI integration for Midjourney API with nodes for submitting requests, polling results, and extracting JSON data. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "saltchicken",
|
||||
"title": "ComfyUI-Local-Loader",
|
||||
"reference": "https://github.com/saltchicken/ComfyUI-Local-Loader",
|
||||
"files": [
|
||||
"https://github.com/saltchicken/ComfyUI-Local-Loader"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for loading images from specified directories and file paths. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "satyasairazole",
|
||||
"title": "ComfyUI-Turbandetection [WIP]",
|
||||
"reference": "https://github.com/satyasairazole/ComfyUI-Turbandetection",
|
||||
"files": [
|
||||
"https://github.com/satyasairazole/ComfyUI-Turbandetection"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI node for detecting turbans in images using computer vision. (Description by CC)\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "dougbtv",
|
||||
"title": "comfyui-vllm-omni",
|
||||
"reference": "https://github.com/dougbtv/comfyui-vllm-omni",
|
||||
"files": [
|
||||
"https://github.com/dougbtv/comfyui-vllm-omni"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node for vLLM-Omni text-to-image generation"
|
||||
},
|
||||
{
|
||||
"author": "u5dev",
|
||||
"title": "ComfyUI_u5_EasyScripter [UNSAFE]",
|
||||
"reference": "https://github.com/u5dev/ComfyUI_u5_EasyScripter",
|
||||
"files": [
|
||||
"https://github.com/u5dev/ComfyUI_u5_EasyScripter"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "EASY VBA-style script for ComfyUI. Anything you want be in 1 node. Conditional branching, iteration, prompt generation, parameter adjustment, memory release, file input/output, Using HTTP RestAPI ... with 100+ built-in functions![w/This nodepack has RCE, SSRF, and arbitrary file read vulnerabilities.]"
|
||||
},
|
||||
{
|
||||
"author": "stalkervr",
|
||||
"title": "ComfyUI-StalkerVr",
|
||||
"reference": "https://github.com/stalkervr/ComfyUI-StalkerVr",
|
||||
"files": [
|
||||
"https://github.com/stalkervr/ComfyUI-StalkerVr"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for image processing, aspect ratio fixing, batch cropping, grid manipulation, JSON handling, and value extraction. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "baoanhng",
|
||||
"title": "ComfyUI-utils",
|
||||
"reference": "https://github.com/baoanhng/ComfyUI-utils",
|
||||
"files": [
|
||||
"https://github.com/baoanhng/ComfyUI-utils"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Provides text utility nodes (TextJoiner, TextSplitter) for ComfyUI workflows. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "xuchenxu168",
|
||||
"title": "[WIP] comfyui_meituan_image",
|
||||
"reference": "https://github.com/xuchenxu168/comfyui_meituan_image",
|
||||
"files": [
|
||||
"https://github.com/xuchenxu168/comfyui_meituan_image"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Generate high-quality images from text prompts with excellent Chinese text rendering,Edit images using natural language instructions..\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "saltchicken",
|
||||
"title": "ComfyUI-Identity-Mixer",
|
||||
|
||||
@ -2581,6 +2581,14 @@
|
||||
"title_aux": "comfyui_LK_selfuse"
|
||||
}
|
||||
],
|
||||
"https://github.com/LMietkiewicz/HiggsfieldAPI_Node": [
|
||||
[
|
||||
"HiggsfieldAPI"
|
||||
],
|
||||
{
|
||||
"title_aux": "HiggsfieldAPI_Node"
|
||||
}
|
||||
],
|
||||
"https://github.com/LSDJesus/ComfyUI-Luna-Collection": [
|
||||
[
|
||||
"LunaBatchPromptExtractor",
|
||||
@ -2611,6 +2619,7 @@
|
||||
"LunaModelRouter",
|
||||
"LunaMultiSaver",
|
||||
"LunaOptimizedWeightsManager",
|
||||
"LunaPipeExpander",
|
||||
"LunaPromptCraft",
|
||||
"LunaPromptCraftDebug",
|
||||
"LunaSecondaryModelLoader",
|
||||
@ -4006,6 +4015,17 @@
|
||||
"title_aux": "Retro Engine Node for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/SSYCloud/comfyui-ssy-syncapi": [
|
||||
[
|
||||
"SSYBytedanceProcessor",
|
||||
"SSYDoubaoGenerator",
|
||||
"SSYGoogleGenerator",
|
||||
"SSYOpenAIGenerator"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-ssy-syncapi [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/SXQBW/ComfyUI-Qwen3": [
|
||||
[
|
||||
"QwenVisionParser"
|
||||
@ -4419,6 +4439,17 @@
|
||||
"title_aux": "ComfyUI_Remaker_FaceSwap"
|
||||
}
|
||||
],
|
||||
"https://github.com/Spicely/ComfyUI-Luma": [
|
||||
[
|
||||
"AddVideoTextWatermark",
|
||||
"GetDeviceType",
|
||||
"SeparateVideoAudio",
|
||||
"Wav2Srt"
|
||||
],
|
||||
{
|
||||
"title_aux": "[WIP] ComfyUI-Luma"
|
||||
}
|
||||
],
|
||||
"https://github.com/Stable-X/ComfyUI-Hi3DGen": [
|
||||
[
|
||||
"DifferenceExtractorNode",
|
||||
@ -5822,6 +5853,15 @@
|
||||
"title_aux": "BigModelPipe [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/baoanhng/ComfyUI-utils": [
|
||||
[
|
||||
"TextJoiner",
|
||||
"TextSplitter"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-utils"
|
||||
}
|
||||
],
|
||||
"https://github.com/barakapa/barakapa-nodes": [
|
||||
[
|
||||
"brkp_ConcatenateString",
|
||||
@ -7291,6 +7331,15 @@
|
||||
"title_aux": "ComfyUI_WcpD_Utility_Kit"
|
||||
}
|
||||
],
|
||||
"https://github.com/dougbtv/comfyui-vllm-omni": [
|
||||
[
|
||||
"VLLMImageEdit",
|
||||
"VLLMTextToImage"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-vllm-omni"
|
||||
}
|
||||
],
|
||||
"https://github.com/dowands/ComfyUI-AddMaskForICLora": [
|
||||
[
|
||||
"AddMaskForICLora"
|
||||
@ -8129,6 +8178,7 @@
|
||||
[
|
||||
"HolafBypasser",
|
||||
"HolafGroupBypasser",
|
||||
"HolafImageBatchSlice",
|
||||
"HolafImageComparer",
|
||||
"HolafInstagramResize",
|
||||
"HolafKSampler",
|
||||
@ -8141,6 +8191,7 @@
|
||||
"HolafRemote",
|
||||
"HolafResolutionPreset",
|
||||
"HolafSaveImage",
|
||||
"HolafSaveVideo",
|
||||
"HolafShortcut",
|
||||
"HolafShortcutUser",
|
||||
"HolafTiledKSampler",
|
||||
@ -8859,6 +8910,17 @@
|
||||
"title_aux": "ComfyUI-AliCloud-Bailian [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/jinchanz/ComfyUI-Midjourney": [
|
||||
[
|
||||
"MidjourneyAPI",
|
||||
"MidjourneyAPIPoll",
|
||||
"MidjourneyAPISubmit",
|
||||
"MidjourneyJSONExtractor"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Midjourney"
|
||||
}
|
||||
],
|
||||
"https://github.com/jn-jairo/jn_node_suite_comfyui": [
|
||||
[
|
||||
"JN_AreaInfo",
|
||||
@ -9663,7 +9725,6 @@
|
||||
"MaskToSAMCoordsV2",
|
||||
"MorseCode",
|
||||
"PoseReformer",
|
||||
"SaveITAsZip",
|
||||
"SaveImageAsZip",
|
||||
"SaveTextAsZip",
|
||||
"StrFormat",
|
||||
@ -9739,6 +9800,28 @@
|
||||
"title_aux": "ComfyUI-Alternatives"
|
||||
}
|
||||
],
|
||||
"https://github.com/logicalor/comfyui_mv_adapter": [
|
||||
[
|
||||
"MVAdapterBackgroundRemoval",
|
||||
"MVAdapterCameraEmbed",
|
||||
"MVAdapterClearVRAM",
|
||||
"MVAdapterI2MVSampler",
|
||||
"MVAdapterImageGrid",
|
||||
"MVAdapterImagePreprocess",
|
||||
"MVAdapterLoRALoader",
|
||||
"MVAdapterModelSetup",
|
||||
"MVAdapterPipelineLoader",
|
||||
"MVAdapterReferencePreprocess",
|
||||
"MVAdapterSchedulerConfig",
|
||||
"MVAdapterSplitViews",
|
||||
"MVAdapterT2MVSampler",
|
||||
"MVAdapterVAEDecode",
|
||||
"MVAdapterViewSelector"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui_mv_adapter [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/logtd/ComfyUI-HunyuanLoom": [
|
||||
[
|
||||
"ConfigureModifiedHY",
|
||||
@ -11170,6 +11253,15 @@
|
||||
"title_aux": "comfyui_api_executor_nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/rafstahelin/ComfyUI_KieNanoBananaPro": [
|
||||
[
|
||||
"KieNanoBananaPro",
|
||||
"KieNanoBananaProBatch"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_KieNanoBananaPro"
|
||||
}
|
||||
],
|
||||
"https://github.com/rakete/comfyui-rakete": [
|
||||
[
|
||||
"rakete.BuildString",
|
||||
@ -11524,6 +11616,15 @@
|
||||
"title_aux": "ComfyUI-Identity-Mixer"
|
||||
}
|
||||
],
|
||||
"https://github.com/saltchicken/ComfyUI-Local-Loader": [
|
||||
[
|
||||
"LoadImageFromDir",
|
||||
"LoadImageFromPath"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Local-Loader"
|
||||
}
|
||||
],
|
||||
"https://github.com/saltchicken/ComfyUI-Prompter": [
|
||||
[
|
||||
"CustomizablePromptGenerator"
|
||||
@ -11532,6 +11633,14 @@
|
||||
"title_aux": "ComfyUI-Prompter"
|
||||
}
|
||||
],
|
||||
"https://github.com/satyasairazole/ComfyUI-Turbandetection": [
|
||||
[
|
||||
"TurbanDetectorNode"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Turbandetection [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/saulchiu/comfy_saul_plugin": [
|
||||
[
|
||||
"Blend Images",
|
||||
@ -11969,6 +12078,39 @@
|
||||
"title_aux": "comfyui-lingshang"
|
||||
}
|
||||
],
|
||||
"https://github.com/stalkervr/ComfyUI-StalkerVr": [
|
||||
[
|
||||
"AnyCollector",
|
||||
"ImageAspectRatioFixer",
|
||||
"ImageBatchCrop",
|
||||
"ImageGridCropper",
|
||||
"JsonArraySplitter",
|
||||
"JsonBuilder",
|
||||
"JsonDeserializeObject",
|
||||
"JsonFieldRemover",
|
||||
"JsonFieldReplaceAdvanced",
|
||||
"JsonFieldValueExtractor",
|
||||
"JsonPairInput",
|
||||
"JsonPathLoader",
|
||||
"JsonPromptToTextPromptConverter",
|
||||
"JsonRootListExtractor",
|
||||
"JsonSerializeObject",
|
||||
"JsonToString",
|
||||
"ListItemExtractor",
|
||||
"LogValue",
|
||||
"LoopAny",
|
||||
"PromptPartJoin",
|
||||
"StringBuilder",
|
||||
"StringCollector",
|
||||
"StringConcatenation",
|
||||
"StringListToString",
|
||||
"StringWrapper",
|
||||
"WanVideoMultiPrompt"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-StalkerVr"
|
||||
}
|
||||
],
|
||||
"https://github.com/stalkervr/comfyui-custom-path-nodes": [
|
||||
[
|
||||
"AnyCollector",
|
||||
@ -12011,6 +12153,16 @@
|
||||
"title_aux": "ComfyUI-Audio-Subtitle [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/starsFriday/ComfyUI-LongCat-Image": [
|
||||
[
|
||||
"LongCatImageEdit",
|
||||
"LongCatImageModelLoader",
|
||||
"LongCatImageTextToImage"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-LongCat-Image [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/starsFriday/ComfyUI-Tracker-Person": [
|
||||
[
|
||||
"YoloTrackNode"
|
||||
@ -12206,6 +12358,14 @@
|
||||
"title_aux": "comfyuiCustomNode"
|
||||
}
|
||||
],
|
||||
"https://github.com/tardey07/ComfyUI-PT-TTM": [
|
||||
[
|
||||
"PT_TTM"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-PT-TTM"
|
||||
}
|
||||
],
|
||||
"https://github.com/tc888/ComfyUI_Save_Flux_Image": [
|
||||
[
|
||||
"Cfg Literal",
|
||||
@ -12548,6 +12708,23 @@
|
||||
"title_aux": "ComfyUI-SaveImg-W-MetaData"
|
||||
}
|
||||
],
|
||||
"https://github.com/u5dev/ComfyUI_u5_EasyScripter": [
|
||||
[
|
||||
"comfyUI_u5_easyscripter",
|
||||
"u5_CLIPLoader",
|
||||
"u5_CLIPVisionLoader",
|
||||
"u5_CheckpointLoader",
|
||||
"u5_ControlNetLoader",
|
||||
"u5_GLIGENLoader",
|
||||
"u5_LoraLoader",
|
||||
"u5_StyleModelLoader",
|
||||
"u5_UNETLoader",
|
||||
"u5_VAELoader"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_u5_EasyScripter [UNSAFE]"
|
||||
}
|
||||
],
|
||||
"https://github.com/umisetokikaze/comfyui_mergekit": [
|
||||
[
|
||||
"DefineSaveName",
|
||||
@ -13066,6 +13243,16 @@
|
||||
"title_aux": "ComfyUI-DreamOmni2-GGUF [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/xuchenxu168/comfyui_meituan_image": [
|
||||
[
|
||||
"MeituanLongCatEdit",
|
||||
"MeituanLongCatLoader",
|
||||
"MeituanLongCatT2I"
|
||||
],
|
||||
{
|
||||
"title_aux": "[WIP] comfyui_meituan_image"
|
||||
}
|
||||
],
|
||||
"https://github.com/xzuyn/ComfyUI-xzuynodes": [
|
||||
[
|
||||
"CLIPLoaderXZ",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,105 @@
|
||||
{
|
||||
"custom_nodes": [
|
||||
{
|
||||
"author": "SanDiegoDude",
|
||||
"title": "SCG_LocalVLM",
|
||||
"reference": "https://github.com/SanDiegoDude/SCG_LocalVLM",
|
||||
"files": [
|
||||
"https://github.com/SanDiegoDude/SCG_LocalVLM"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This is an implementation of [Qwen3-VL](https://github.com/QwenLM/Qwen3-VL) for [ComfyUI](https://github.com/comfyanonymous/ComfyUI), which supports for text-based and single-image queries."
|
||||
},
|
||||
{
|
||||
"author": "HM-RunningHub",
|
||||
"title": "ComfyUI_RH_QwenImageI2L",
|
||||
"reference": "https://github.com/HM-RunningHub/ComfyUI_RH_QwenImageI2L",
|
||||
"files": [
|
||||
"https://github.com/HM-RunningHub/ComfyUI_RH_QwenImageI2L"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node that generates Image-to-LoRA (I2L) LoRA from training images using DiffSynth-Studio Qwen-Image i2L pipelines."
|
||||
},
|
||||
{
|
||||
"author": "ckinpdx",
|
||||
"title": "comfyui-humo-audio-motion",
|
||||
"reference": "https://github.com/ckinpdx/comfyui-humo-audio-motion",
|
||||
"files": [
|
||||
"https://github.com/ckinpdx/comfyui-humo-audio-motion"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node for granular Q/K/V/O attention boosting in HuMo models. Provides 12 independent controls for fine-tuning audio-driven motion response."
|
||||
},
|
||||
{
|
||||
"author": "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": "Sean-Bradley",
|
||||
"title": "ComfyUI-Get-Line",
|
||||
"reference": "https://github.com/Sean-Bradley/ComfyUI-Get-Line",
|
||||
"files": [
|
||||
"https://github.com/Sean-Bradley/ComfyUI-Get-Line"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node used to get one line of string from a multi line string. Search in the manager for `get line`, or `getline` or `get-line`."
|
||||
},
|
||||
{
|
||||
"author": "GavChap",
|
||||
"title": "ComfyUI_ExtractLora",
|
||||
"reference": "https://github.com/GavChap/ComfyUI_ExtractLora",
|
||||
"files": [
|
||||
"https://github.com/GavChap/ComfyUI_ExtractLora"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Creates lora from two checkpoints by extracting the difference."
|
||||
},
|
||||
{
|
||||
"author": "ssspace1",
|
||||
"title": "SSpack_ComfyUI",
|
||||
"reference": "https://github.com/ssspace1/SSpack_ComfyUI",
|
||||
"files": [
|
||||
"https://github.com/ssspace1/SSpack_ComfyUI"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Compact, UI-friendly nodes for ComfyUI with LoRA/checkpoint selectors with thumbnails, text utilities, image helpers, and a lightweight cache cleaner script."
|
||||
},
|
||||
{
|
||||
"author": "logicalor",
|
||||
"title": "comfyui_text_to_pose",
|
||||
"reference": "https://github.com/logicalor/comfyui_text_to_pose",
|
||||
"files": [
|
||||
"https://github.com/logicalor/comfyui_text_to_pose"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Generate human poses from text descriptions using T2P Transformer for ControlNet/T2I-Adapter workflows"
|
||||
},
|
||||
{
|
||||
"author": "kijai",
|
||||
"title": "ComfyUI-SCAIL-Pose",
|
||||
"reference": "https://github.com/kijai/ComfyUI-SCAIL-Pose",
|
||||
"files": [
|
||||
"https://github.com/kijai/ComfyUI-SCAIL-Pose"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes for SCAIL input processing"
|
||||
},
|
||||
{
|
||||
"author": "ShammiG",
|
||||
"title": "ComfyUI-Show_Any_Text_in_CMD_Console-SG",
|
||||
"reference": "https://github.com/ShammiG/ComfyUI-Show_Any_Text_in_CMD_Console-SG",
|
||||
"files": [
|
||||
"https://github.com/ShammiG/ComfyUI-Show_Any_Text_in_CMD_Console-SG"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Simple node to show ANY output text in the CMD console with color options"
|
||||
},
|
||||
{
|
||||
"author": "ubisoft",
|
||||
"title": "ComfyUI-Chord",
|
||||
@ -597,106 +697,6 @@
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A collection of helper nodes for working with LLM APIs in ComfyUI, intended to complement other LLM custom nodes."
|
||||
},
|
||||
{
|
||||
"author": "febogallo",
|
||||
"title": "ComfyUI-Freepik",
|
||||
"reference": "https://github.com/febogallo/ComfyUI-Freepik",
|
||||
"files": [
|
||||
"https://github.com/febogallo/ComfyUI-Freepik"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Integrates Freepik's AI capabilities into ComfyUI workflows with features for photorealistic generation, upscaling, and background removal, plus smart caching and cost management. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "karas17",
|
||||
"title": "comfyui_GLM_TTS",
|
||||
"reference": "https://github.com/karas17/comfyui_GLM_TTS",
|
||||
"files": [
|
||||
"https://github.com/karas17/comfyui_GLM_TTS"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes for GLM-TTS, a high-quality text-to-speech system supporting zero-shot voice cloning."
|
||||
},
|
||||
{
|
||||
"author": "pantaleone-ai",
|
||||
"title": "Comfy-Firefly",
|
||||
"reference": "https://github.com/pantaleone-ai/Comfy-Firefly",
|
||||
"files": [
|
||||
"https://github.com/pantaleone-ai/Comfy-Firefly"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom ComfyUI node for generating images using Adobe Firefly Services API v3 with automatic authentication and standard tensor output."
|
||||
},
|
||||
{
|
||||
"author": "NOLABEL-VFX",
|
||||
"title": "ComfyUI-NL_Nodes",
|
||||
"reference": "https://github.com/NOLABEL-VFX/ComfyUI-NL_Nodes",
|
||||
"files": [
|
||||
"https://github.com/NOLABEL-VFX/ComfyUI-NL_Nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom ComfyUI nodes by NOLABEL for studio workflows, featuring Shot Path Builder that generates standardized, sanitized file and folder names with versioning for renders."
|
||||
},
|
||||
{
|
||||
"author": "ARM64-EC",
|
||||
"title": "ComfyUI-LongCatPlugin",
|
||||
"reference": "https://github.com/ARM64-EC/ComfyUI-LongCatPlugin",
|
||||
"files": [
|
||||
"https://github.com/ARM64-EC/ComfyUI-LongCatPlugin"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes wrapping LongCat image generation and editing pipelines with text-to-image and multi-image edit flows using diffusers framework. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "fabbarix",
|
||||
"title": "comfyui-promptstore",
|
||||
"reference": "https://github.com/fabbarix/comfyui-promptstore",
|
||||
"files": [
|
||||
"https://github.com/fabbarix/comfyui-promptstore"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom node system for ComfyUI enabling efficient prompt management with YAML-based datastore, categories, selection interface, and dynamic text interpolation for creating complex prompts."
|
||||
},
|
||||
{
|
||||
"author": "hubo502",
|
||||
"title": "ComfyUI-Env-Loader",
|
||||
"reference": "https://github.com/hubo502/ComfyUI-Env-Loader",
|
||||
"files": [
|
||||
"https://github.com/hubo502/ComfyUI-Env-Loader"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node set that reads .env files at startup and provides dropdown selection or dynamic multi-port output for environment variable access in workflows. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "BobRandomNumber",
|
||||
"title": "ComfyUI-BasicOllama",
|
||||
"reference": "https://github.com/BobRandomNumber/ComfyUI-BasicOllama",
|
||||
"files": [
|
||||
"https://github.com/BobRandomNumber/ComfyUI-BasicOllama"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A simplified node that provides access to Ollama. It allows you to send prompts, system prompts, and images to your Ollama instance and receive text-based responses."
|
||||
},
|
||||
{
|
||||
"author": "jonstreeter",
|
||||
"title": "comfyui-Lora-Tag-Power-Loader",
|
||||
"reference": "https://github.com/jonstreeter/comfyui-Lora-Tag-Power-Loader",
|
||||
"files": [
|
||||
"https://github.com/jonstreeter/comfyui-Lora-Tag-Power-Loader"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A powerful ComfyUI custom node that combines text-based LoRA tag detection with advanced dual noise weight support, perfect for WanVideo/Hunyuan Video workflows."
|
||||
},
|
||||
{
|
||||
"author": "KAVVATARE",
|
||||
"title": "ComfyUI_SimpleGoogleTranslate",
|
||||
"reference": "https://github.com/KAVVATARE/ComfyUI_SimpleGoogleTranslate",
|
||||
"files": [
|
||||
"https://github.com/KAVVATARE/ComfyUI_SimpleGoogleTranslate"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Minimal and easy-to-use Google Translate text node for ComfyUI using the googletrans library with automatic language detection and full language support. (Description by CC)"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@ -2250,6 +2250,7 @@
|
||||
"ForceDetectPixelateScale",
|
||||
"ImageScaleDownByFactor",
|
||||
"ImageUpscaleByInt",
|
||||
"ImagesToRGB",
|
||||
"NearestImageScaleDown",
|
||||
"PixelUpscale2Target",
|
||||
"RemoveBackgroundPixel",
|
||||
@ -2934,6 +2935,7 @@
|
||||
"https://github.com/Aryan185/ComfyUI-VertexAPI": [
|
||||
[
|
||||
"GeminiChatVertexNode",
|
||||
"GeminiDiarisationNode",
|
||||
"GeminiSegmentationVertexNode",
|
||||
"GeminiTTSVertexNode",
|
||||
"GoogleImagenEditNode",
|
||||
@ -7965,6 +7967,14 @@
|
||||
"title_aux": "ComfyUI-SD3LatentSelectRes"
|
||||
}
|
||||
],
|
||||
"https://github.com/GavChap/ComfyUI_ExtractLora": [
|
||||
[
|
||||
"ExtractLoRA"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_ExtractLora"
|
||||
}
|
||||
],
|
||||
"https://github.com/GeekatplayStudio/ComfyUI-Text2Speech": [
|
||||
[
|
||||
"HttpTTSToAudio",
|
||||
@ -8529,6 +8539,16 @@
|
||||
"title_aux": "ComfyUI Ovi Node"
|
||||
}
|
||||
],
|
||||
"https://github.com/HM-RunningHub/ComfyUI_RH_QwenImageI2L": [
|
||||
[
|
||||
"RunningHub_ImageQwenI2L_Loader(CFB)",
|
||||
"RunningHub_ImageQwenI2L_Loader(Style)",
|
||||
"RunningHub_ImageQwenI2L_LoraGenerator"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_RH_QwenImageI2L"
|
||||
}
|
||||
],
|
||||
"https://github.com/HM-RunningHub/ComfyUI_RH_SeedXPro": [
|
||||
[
|
||||
"RunningHub SeedXPro Translator"
|
||||
@ -11259,7 +11279,6 @@
|
||||
"LG_InstallDependencies",
|
||||
"LG_LatentBatchToList",
|
||||
"LG_LoadImage",
|
||||
"LG_LoadImage_V2",
|
||||
"LG_MaskBatchMerge",
|
||||
"LG_MaskHoleFiller",
|
||||
"LG_Noise",
|
||||
@ -11378,6 +11397,7 @@
|
||||
"Texturaizer_ApplyStyleToPrompt",
|
||||
"Texturaizer_CachedCNLoader",
|
||||
"Texturaizer_CachedCheckpointLoader",
|
||||
"Texturaizer_CircularVAEDecode",
|
||||
"Texturaizer_ClipEncodeSwitchVersion",
|
||||
"Texturaizer_CombinedConditioningFromColors",
|
||||
"Texturaizer_ExtractCNData",
|
||||
@ -11402,11 +11422,13 @@
|
||||
"Texturaizer_KSamplerAdvanced",
|
||||
"Texturaizer_Placeholder",
|
||||
"Texturaizer_PowerLoraLoader",
|
||||
"Texturaizer_SeamlessTilingPatch",
|
||||
"Texturaizer_SendImage",
|
||||
"Texturaizer_SetGlobalDir",
|
||||
"Texturaizer_SigmasSelector",
|
||||
"Texturaizer_SwitchAny",
|
||||
"Texturaizer_SwitchLazy",
|
||||
"Texturaizer_SwitchSmart",
|
||||
"Texturaizer_UseSDXL"
|
||||
],
|
||||
{
|
||||
@ -14612,6 +14634,7 @@
|
||||
],
|
||||
"https://github.com/PozzettiAndrea/ComfyUI-GeometryPack": [
|
||||
[
|
||||
"GeomPackAddNormalsToPointCloud",
|
||||
"GeomPackBackdraftView",
|
||||
"GeomPackBooleanOp",
|
||||
"GeomPackCheckNormals",
|
||||
@ -14637,6 +14660,7 @@
|
||||
"GeomPackMeshQuality",
|
||||
"GeomPackMeshToMeshDistance",
|
||||
"GeomPackMeshToPointCloud",
|
||||
"GeomPackNormalizeMeshToBBox",
|
||||
"GeomPackPointToMeshDistance",
|
||||
"GeomPackPreviewMesh",
|
||||
"GeomPackPreviewMeshDual",
|
||||
@ -15323,6 +15347,7 @@
|
||||
"Runware Alibaba Provider Settings",
|
||||
"Runware Audio Inference",
|
||||
"Runware Audio Inference Inputs",
|
||||
"Runware Audio Inputs Combine",
|
||||
"Runware Audio Model Search",
|
||||
"Runware Audio Sections",
|
||||
"Runware Background Removal",
|
||||
@ -15365,20 +15390,27 @@
|
||||
"Runware Refiner",
|
||||
"Runware Runway Provider Settings",
|
||||
"Runware Safety Inputs",
|
||||
"Runware Speech Inputs Combine",
|
||||
"Runware Sync Provider Settings",
|
||||
"Runware Sync Segment",
|
||||
"Runware VAE Search",
|
||||
"Runware Vectorize",
|
||||
"Runware Video Advanced Feature Inputs",
|
||||
"Runware Video Audio Input",
|
||||
"Runware Video Background Removal",
|
||||
"Runware Video Inference",
|
||||
"Runware Video Inference Inputs",
|
||||
"Runware Video Inputs Frame Images",
|
||||
"Runware Video Inputs References",
|
||||
"Runware Video Model Search",
|
||||
"Runware Video Speech Input",
|
||||
"Runware Video Transcription",
|
||||
"Runware Video Upscaler",
|
||||
"Runware Vidu Provider Settings",
|
||||
"RunwareAlibabaProviderSettings",
|
||||
"RunwareAudioInferenceInputs",
|
||||
"RunwareAudioInput",
|
||||
"RunwareAudioInputCombine",
|
||||
"RunwareBriaProviderSettings",
|
||||
"RunwareBytedanceProviderSettings",
|
||||
"RunwareFrameImages",
|
||||
@ -15391,6 +15423,10 @@
|
||||
"RunwarePixverseProviderSettings",
|
||||
"RunwareRunwayProviderSettings",
|
||||
"RunwareSafetyInputs",
|
||||
"RunwareSpeechInput",
|
||||
"RunwareSpeechInputCombine",
|
||||
"RunwareSyncProviderSettings",
|
||||
"RunwareSyncSegment",
|
||||
"RunwareVectorize",
|
||||
"RunwareVideoAdvancedFeatureInputs",
|
||||
"RunwareVideoBgRemoval",
|
||||
@ -15849,6 +15885,17 @@
|
||||
"title_aux": "ComfyUI-SaveAudioMP3"
|
||||
}
|
||||
],
|
||||
"https://github.com/SanDiegoDude/SCG_LocalVLM": [
|
||||
[
|
||||
"Qwen",
|
||||
"Qwen2.5",
|
||||
"Qwen2.5VL",
|
||||
"QwenVL"
|
||||
],
|
||||
{
|
||||
"title_aux": "SCG_LocalVLM"
|
||||
}
|
||||
],
|
||||
"https://github.com/Santat2023/ComfyUiRagNodes": [
|
||||
[
|
||||
"MyNodesForDB",
|
||||
@ -16046,6 +16093,14 @@
|
||||
"title_aux": "ComfyUI-Long-CLIP"
|
||||
}
|
||||
],
|
||||
"https://github.com/Sean-Bradley/ComfyUI-Get-Line": [
|
||||
[
|
||||
"Get Line"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Get-Line"
|
||||
}
|
||||
],
|
||||
"https://github.com/Sean-Bradley/ComfyUI-Image-Compare": [
|
||||
[
|
||||
"ImageCompareNode"
|
||||
@ -16308,6 +16363,14 @@
|
||||
"title_aux": "ComfyUI Show Clock in CMD Console SG"
|
||||
}
|
||||
],
|
||||
"https://github.com/ShammiG/ComfyUI-Show_Any_Text_in_CMD_Console-SG": [
|
||||
[
|
||||
"ShowAnyTextInCMDconsoleSG"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Show_Any_Text_in_CMD_Console-SG"
|
||||
}
|
||||
],
|
||||
"https://github.com/ShammiG/ComfyUI-Simple_Readable_Metadata-SG": [
|
||||
[
|
||||
"Simple Readable Metadata Text Viewer-SG",
|
||||
@ -17009,6 +17072,16 @@
|
||||
"title_aux": "JPG & Noise Remover for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/SofianeAlla/ComfyUI-BespokeAI-3D": [
|
||||
[
|
||||
"BespokeAI3DGeneration",
|
||||
"BespokeAI3DGenerationFromURL",
|
||||
"BespokeAI3DPreview"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-BespokeAI-3D"
|
||||
}
|
||||
],
|
||||
"https://github.com/SoftMeng/ComfyUI-DeepCache-Fix": [
|
||||
[
|
||||
"DeepCache_Fix"
|
||||
@ -17689,6 +17762,7 @@
|
||||
"StarIconExporter",
|
||||
"StarImageEditQwenKontext",
|
||||
"StarImageLoader1by1",
|
||||
"StarImageLoop",
|
||||
"StarImageSwitch",
|
||||
"StarImageSwitch2",
|
||||
"StarInfiniteYouAdvancedPatchMaker",
|
||||
@ -17734,6 +17808,7 @@
|
||||
"StarTextFilter",
|
||||
"StarTextInput",
|
||||
"StarTextStorage",
|
||||
"StarVideoLoop",
|
||||
"StarWatermark",
|
||||
"StarWildcardsAdvanced",
|
||||
"StarWildsAdv",
|
||||
@ -22076,6 +22151,7 @@
|
||||
"AKSamplerSettings",
|
||||
"AKSettingsOut",
|
||||
"CLIPEncodeMultiple",
|
||||
"CLIPTextEncodeCached",
|
||||
"IndexMultiple",
|
||||
"IsOneOfGroupsActive",
|
||||
"PreviewRawText",
|
||||
@ -22169,6 +22245,7 @@
|
||||
[
|
||||
"AF_Edit_Generated_Prompt",
|
||||
"AF_Load_Prompt_History",
|
||||
"AF_Model_Switch",
|
||||
"AF_Save_Prompt_History",
|
||||
"AF_Show_Text"
|
||||
],
|
||||
@ -25668,6 +25745,7 @@
|
||||
[
|
||||
"Cubemap Faces Extract",
|
||||
"Cubemap To Equirectangular",
|
||||
"Cubemap To Equirectangular (Flexible)",
|
||||
"Equirectangular Crop 180",
|
||||
"Equirectangular Crop Square",
|
||||
"Equirectangular Edge Blender",
|
||||
@ -25678,6 +25756,15 @@
|
||||
"Equirectangular Rotate",
|
||||
"Equirectangular Rotate Preset",
|
||||
"Equirectangular To Cubemap",
|
||||
"Equirectangular To Cubemap (Flexible)",
|
||||
"LatLong Apply Circular Padding Model",
|
||||
"LatLong Apply Circular Padding VAE",
|
||||
"LatLong Create Pole Mask",
|
||||
"LatLong Create Seam Mask",
|
||||
"LatLong Roll Image",
|
||||
"LatLong Roll Mask",
|
||||
"LatLong Split Cubemap Faces",
|
||||
"LatLong Stack Cubemap Faces",
|
||||
"PanoramaVideoViewerNode",
|
||||
"PanoramaViewerNode"
|
||||
],
|
||||
@ -27301,6 +27388,15 @@
|
||||
"title_aux": "ComfyUI-WanKeyframeBuilder"
|
||||
}
|
||||
],
|
||||
"https://github.com/ckinpdx/comfyui-humo-audio-motion": [
|
||||
[
|
||||
"HuMoAudioAttentionControlV4",
|
||||
"HuMoLipsyncSuppressAttn"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-humo-audio-motion"
|
||||
}
|
||||
],
|
||||
"https://github.com/claptrap0/ComfyUI_LLM_Hub": [
|
||||
[
|
||||
"Generated_Output",
|
||||
@ -30896,7 +30992,8 @@
|
||||
"MeuxAdvancedImageCrop",
|
||||
"MeuxImageLoader",
|
||||
"MeuxMultiSaveImage",
|
||||
"MeuxSimpleLLMNode"
|
||||
"MeuxSimpleLLMNode",
|
||||
"MeuxTextAreaInput"
|
||||
],
|
||||
{
|
||||
"title_aux": "BaiduMeux_Comfy Tools"
|
||||
@ -30907,7 +31004,8 @@
|
||||
"MeuxAdvancedImageCrop",
|
||||
"MeuxImageLoader",
|
||||
"MeuxMultiSaveImage",
|
||||
"MeuxSimpleLLMNode"
|
||||
"MeuxSimpleLLMNode",
|
||||
"MeuxTextAreaInput"
|
||||
],
|
||||
{
|
||||
"title_aux": "MultiSaveImage Node"
|
||||
@ -31428,6 +31526,14 @@
|
||||
"title_aux": "ComfyUI-hvBlockswap"
|
||||
}
|
||||
],
|
||||
"https://github.com/flybirdxx/ComfyUI-Prompt_Helper": [
|
||||
[
|
||||
"QwenImageEngineer"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Prompt_Helper"
|
||||
}
|
||||
],
|
||||
"https://github.com/flybirdxx/ComfyUI-RexOmni": [
|
||||
[
|
||||
"RexOmniDetector",
|
||||
@ -36827,6 +36933,7 @@
|
||||
"https://github.com/kijai/ComfyUI-KJNodes": [
|
||||
[
|
||||
"AddLabel",
|
||||
"AddNoiseToTrackPath",
|
||||
"AppendInstanceDiffusionTracking",
|
||||
"AppendStringsToList",
|
||||
"ApplyRifleXRoPE_HunuyanVideo",
|
||||
@ -37201,6 +37308,15 @@
|
||||
"title_aux": "ComfyUI PyramidFlow Wrapper"
|
||||
}
|
||||
],
|
||||
"https://github.com/kijai/ComfyUI-SCAIL-Pose": [
|
||||
[
|
||||
"PoseDetectionVitPoseToDWPose",
|
||||
"RenderNLFPoses"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-SCAIL-Pose"
|
||||
}
|
||||
],
|
||||
"https://github.com/kijai/ComfyUI-SUPIR": [
|
||||
[
|
||||
"SUPIR_Upscale",
|
||||
@ -38992,6 +39108,18 @@
|
||||
"title_aux": "Comfyui_three_js"
|
||||
}
|
||||
],
|
||||
"https://github.com/logicalor/comfyui_text_to_pose": [
|
||||
[
|
||||
"ApplyT2IPoseAdapter",
|
||||
"T2IPoseAdapterLoader",
|
||||
"T2PModelLoader",
|
||||
"TextToPose",
|
||||
"TextToPoseBatch"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui_text_to_pose"
|
||||
}
|
||||
],
|
||||
"https://github.com/logtd/ComfyUI-4DHumans": [
|
||||
[
|
||||
"LoadDetectron",
|
||||
@ -41567,6 +41695,7 @@
|
||||
"https://github.com/morino-kumasan/comfyui-toml-prompt": [
|
||||
[
|
||||
"CheckPointLoaderSimpleFromString",
|
||||
"DropFirstImage",
|
||||
"IntSelector",
|
||||
"JsonExtractFloat",
|
||||
"JsonExtractInt",
|
||||
@ -41586,7 +41715,8 @@
|
||||
"StringSelector",
|
||||
"StringViewer",
|
||||
"SummaryReader",
|
||||
"TomlPromptDecode"
|
||||
"TomlPromptDecode",
|
||||
"UNETLoaderFromString"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-toml-prompt"
|
||||
@ -41893,7 +42023,8 @@
|
||||
"ShellAgentPluginSaveAudios",
|
||||
"ShellAgentPluginSaveImage",
|
||||
"ShellAgentPluginSaveImages",
|
||||
"ShellAgentPluginSaveVideoVHS"
|
||||
"ShellAgentPluginSaveVideoVHS",
|
||||
"ShellAgentPluginVideoCombineEncrypt"
|
||||
],
|
||||
{
|
||||
"author": "MyShell",
|
||||
@ -43472,8 +43603,7 @@
|
||||
"RescaleCFGPost",
|
||||
"SamplerGradientEstimation",
|
||||
"SkipFirstStepCFG",
|
||||
"TCFGAdvanced",
|
||||
"VAEPadding"
|
||||
"TCFGAdvanced"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-ppm"
|
||||
@ -48276,6 +48406,26 @@
|
||||
"title_aux": "ComfyUI roop"
|
||||
}
|
||||
],
|
||||
"https://github.com/ssspace1/SSpack_ComfyUI": [
|
||||
[
|
||||
"SSCheckpointLoader",
|
||||
"SSCheckpointSelector",
|
||||
"SSCheckpointSelector12",
|
||||
"SSCheckpointSelector6",
|
||||
"SSFilter",
|
||||
"SSImageNodeAnnotator",
|
||||
"SSJsonOutput",
|
||||
"SSLoRAStackApplier",
|
||||
"SSLoraSelector",
|
||||
"SSRandomLoraApplier",
|
||||
"SSSavedImageLoader",
|
||||
"SSTextWeight",
|
||||
"SS_SDXL_AutoResize"
|
||||
],
|
||||
{
|
||||
"title_aux": "SSpack_ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/stavsap/comfyui-downloader": [
|
||||
[
|
||||
"DownloadSummaryParser",
|
||||
@ -49287,8 +49437,11 @@
|
||||
"FullPipeOut",
|
||||
"ModelPresetNode",
|
||||
"MultiStringConditioning",
|
||||
"ResolutionSelector",
|
||||
"SeedWithOverride",
|
||||
"StylePresetNode",
|
||||
"TagReplacementNode",
|
||||
"UpscaleNode",
|
||||
"WildcardNode"
|
||||
],
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user