mirror of
https://github.com/Comfy-Org/ComfyUI-Manager.git
synced 2026-01-25 05:20:18 +08:00
Compare commits
20 Commits
ef5ad43f3a
...
3742189c15
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3742189c15 | ||
|
|
f68e19e07b | ||
|
|
9eb4c3ab23 | ||
|
|
72d1aa7d97 | ||
|
|
57628ead80 | ||
|
|
9733c2328b | ||
|
|
70663cecc3 | ||
|
|
7c77942a92 | ||
|
|
04cf18e149 | ||
|
|
1825edda7e | ||
|
|
045f91c411 | ||
|
|
96d24f548c | ||
|
|
f2a05b096f | ||
|
|
9b6b0676e1 | ||
|
|
5e2ca4fe1a | ||
|
|
975642c9bf | ||
|
|
76fd32f146 | ||
|
|
3ae99bc761 | ||
|
|
1dde3c3ef0 | ||
|
|
457c93cd19 |
@ -9805,16 +9805,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Shuffle nodes after queue execution."
|
||||
},
|
||||
{
|
||||
"author": "shinich39",
|
||||
"title": "comfyui-innnnnpaint",
|
||||
"reference": "https://github.com/shinich39/comfyui-innnnnpaint",
|
||||
"files": [
|
||||
"https://github.com/shinich39/comfyui-innnnnpaint"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Load new workflow after mask editing."
|
||||
},
|
||||
{
|
||||
"author": "shinich39",
|
||||
"title": "comfyui-break-workflow",
|
||||
@ -21860,6 +21850,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node that generates Image-to-LoRA (I2L) LoRA from training images using DiffSynth-Studio Qwen-Image i2L pipelines."
|
||||
},
|
||||
{
|
||||
"author": "HM-RunningHub",
|
||||
"title": "ComfyUI_RH_LLM_API",
|
||||
"reference": "https://github.com/HM-RunningHub/ComfyUI_RH_LLM_API",
|
||||
"files": [
|
||||
"https://github.com/HM-RunningHub/ComfyUI_RH_LLM_API"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "An easy-to-use ComfyUI plugin for LLM integration supporting DeepSeek, OpenAI API-compatible models, with video reverse-prompt (captioning) capabilities. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "wqjuser",
|
||||
"title": "ComfyUI-Chat-Image",
|
||||
@ -25246,6 +25246,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom node for ComfyUI that fixes an existing node [a/comfyui-dynamicprompts](https://github.com/adieyal/comfyui-dynamicprompts)."
|
||||
},
|
||||
{
|
||||
"author": "thezveroboy",
|
||||
"title": "ComfyUI-ClipReshaper",
|
||||
"reference": "https://github.com/thezveroboy/ComfyUI-ClipReshaper",
|
||||
"files": [
|
||||
"https://github.com/thezveroboy/ComfyUI-ClipReshaper"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes to reshape/project Conditioning tensors and ensure SDXL conditioning metadata."
|
||||
},
|
||||
{
|
||||
"author": "tatookan",
|
||||
"title": "comfyui_ssl_gemini_EXP",
|
||||
@ -37422,6 +37432,17 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Wan Video Extender extends a short video or a single image into a longer, temporally consistent clip using a VACE based control latent. It runs in multiple extension loops. Each loop can have its own prompt and optional LoRA, so you can evolve the scene step by step without rebuilding the graph."
|
||||
},
|
||||
{
|
||||
"author": "akawana",
|
||||
"title": "AK XZ Axis (XY for any KSampler)",
|
||||
"reference": "https://github.com/akawana/ComfyUI-AK-XZ-Axis",
|
||||
"files": [
|
||||
"https://github.com/akawana/ComfyUI-AK-XZ-Axis"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes for XY-style testing of parameters such as seed, steps, cfg, denoise, prompts, and LoRAs. Does not require a custom KSampler and works with any KSampler, including the default ComfyUI one.",
|
||||
"tags": ["xy_plot", "xy", "xz", "testing", "ksampler"]
|
||||
},
|
||||
{
|
||||
"author": "akawana",
|
||||
"title": "Folded prompts",
|
||||
@ -38296,6 +38317,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Directional mask expansion node that extends masks along specified directions with pixel-precise control, plus separate pinch/widen morphology operations."
|
||||
},
|
||||
{
|
||||
"author": "TheArtOfficial",
|
||||
"title": "ComfyUI-Nitra",
|
||||
"reference": "https://github.com/TheArtOfficial/ComfyUI-Nitra",
|
||||
"files": [
|
||||
"https://github.com/TheArtOfficial/ComfyUI-Nitra"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nitra custom node for ComfyUI"
|
||||
},
|
||||
{
|
||||
"author": "brahianrosswill",
|
||||
"title": "ComfyUi-RandomNoiseCustom",
|
||||
@ -38749,6 +38780,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Comprehensive set of ComfyUI custom nodes for interacting with a Sora-compatible REST API, supporting text-to-video, image-to-video, and video-to-video generation."
|
||||
},
|
||||
{
|
||||
"author": "logicalor",
|
||||
"title": "comfyui_multi_replace",
|
||||
"reference": "https://github.com/logicalor/comfyui_multi_replace",
|
||||
"files": [
|
||||
"https://github.com/logicalor/comfyui_multi_replace"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for creating and applying multiple find/replace pairs to text"
|
||||
},
|
||||
{
|
||||
"author": "logicalor",
|
||||
"title": "comfyui_text_to_pose",
|
||||
@ -38779,7 +38820,56 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for BespokeAI image-to-3D generation\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
|
||||
{
|
||||
"author": "laboratoiresonore",
|
||||
"title": "ComfyUI_PerformanceLab",
|
||||
"reference": "https://github.com/laboratoiresonore/ComfyUI_PerformanceLab",
|
||||
"files": [
|
||||
"https://github.com/laboratoiresonore/ComfyUI_PerformanceLab"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Make any ComfyUI workflow faster, use less VRAM, or produce better quality - with AI assistance"
|
||||
},
|
||||
{
|
||||
"author": "tppp2806",
|
||||
"title": "ComfyUI-YoloTrack",
|
||||
"reference": "https://github.com/tppp2806/ComfyUI-YoloTrack",
|
||||
"files": [
|
||||
"https://github.com/tppp2806/ComfyUI-YoloTrack"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Based on a YOLO model, it performs object detection, capture, and smooth tracking-based cropping on images."
|
||||
},
|
||||
{
|
||||
"author": "revisiontony",
|
||||
"title": "ComfyUI Lora Manager Web Frame",
|
||||
"reference": "https://github.com/revisiontony/LoraMangerWebFrame",
|
||||
"files": [
|
||||
"https://github.com/revisiontony/LoraMangerWebFrame"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Embeds the ComfyUI-Lora-Manager web interface directly into your ComfyUI workflow graph, eliminating the need for a separate browser tab."
|
||||
},
|
||||
{
|
||||
"author": "Maenvaeru",
|
||||
"title": "comfyui-vram-overlay",
|
||||
"reference": "https://github.com/Maenvaeru/comfyui-vram-overlay",
|
||||
"files": [
|
||||
"https://github.com/Maenvaeru/comfyui-vram-overlay"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Professional VRAM monitoring overlay for ComfyUI that displays real-time GPU memory usage as an independent, non-intrusive window. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "PROJECTMAD",
|
||||
"title": "PROJECT-MAD-NODES",
|
||||
"reference": "https://github.com/PROJECTMAD/PROJECT-MAD-NODES",
|
||||
"files": [
|
||||
"https://github.com/PROJECTMAD/PROJECT-MAD-NODES"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Collection of custom ComfyUI nodes for LoRA scheduling and prompt management, featuring visual curve editor and visual prompt gallery with EXIF metadata extraction."
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
@ -2920,6 +2920,7 @@
|
||||
"FluxKontextProNode",
|
||||
"GPTImageEditNode",
|
||||
"GeminiChatNode",
|
||||
"GeminiDiarisationAPI",
|
||||
"GeminiSegmentationNode",
|
||||
"GeminiTTSNode",
|
||||
"GoogleImagenEditNode",
|
||||
@ -2938,8 +2939,8 @@
|
||||
"GeminiDiarisationNode",
|
||||
"GeminiSegmentationVertexNode",
|
||||
"GeminiTTSVertexNode",
|
||||
"GoogleImagenEditNode",
|
||||
"GoogleImagenNode",
|
||||
"GoogleImagenEditVertex",
|
||||
"GoogleImagenVertex",
|
||||
"GoogleVeoVertexVideoGenerator",
|
||||
"NanoBananaVertexNode"
|
||||
],
|
||||
@ -3885,11 +3886,18 @@
|
||||
"BriaEraser",
|
||||
"BriaGenFill",
|
||||
"BriaTailoredGen",
|
||||
"GenerateImageLiteNodeV2",
|
||||
"GenerateImageNodeV2",
|
||||
"GenerateStructuredPromptLiteNodeV2",
|
||||
"GenerateStructuredPromptNodeV2",
|
||||
"ImageExpansionNode",
|
||||
"LoadVideoFramesNode",
|
||||
"PreviewVideoURLNode",
|
||||
"RefineImageLiteNodeV2",
|
||||
"RefineImageNodeV2",
|
||||
"ReimagineNode",
|
||||
"RemoveForegroundNode",
|
||||
"RemoveVideoBackgroundNode",
|
||||
"ReplaceBgNode",
|
||||
"RmbgNode",
|
||||
"ShotByImageAutomatic",
|
||||
@ -3908,7 +3916,12 @@
|
||||
"TailoredPortraitNode",
|
||||
"Text2ImageBaseNode",
|
||||
"Text2ImageFastNode",
|
||||
"Text2ImageHDNode"
|
||||
"Text2ImageHDNode",
|
||||
"VideoEraseElementsNode",
|
||||
"VideoIncreaseResolutionNode",
|
||||
"VideoMaskByKeyPointsNode",
|
||||
"VideoMaskByPromptNode",
|
||||
"VideoSolidColorBackgroundNode"
|
||||
],
|
||||
{
|
||||
"title_aux": "BRIA AI API nodes"
|
||||
@ -4876,6 +4889,15 @@
|
||||
],
|
||||
{}
|
||||
],
|
||||
"https://github.com/ComfyUI/Base64_IO": [
|
||||
[
|
||||
"AnyToBase64",
|
||||
"Base64ToAny",
|
||||
"Base64ToConditioning",
|
||||
"Base64ToLatent"
|
||||
],
|
||||
{}
|
||||
],
|
||||
"https://github.com/ComfyUI/Eagleshadow": [
|
||||
[
|
||||
"Batch 12 Images",
|
||||
@ -8509,6 +8531,14 @@
|
||||
"title_aux": "ComfyUI IC-Custom Node"
|
||||
}
|
||||
],
|
||||
"https://github.com/HM-RunningHub/ComfyUI_RH_LLM_API": [
|
||||
[
|
||||
"RH_LLMAPI_NODE"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_RH_LLM_API"
|
||||
}
|
||||
],
|
||||
"https://github.com/HM-RunningHub/ComfyUI_RH_OminiControl": [
|
||||
[
|
||||
"RunningHub_Omini_Fill",
|
||||
@ -10666,18 +10696,9 @@
|
||||
"JAX_EasyPrompt",
|
||||
"JAX_EasyPromptSimple",
|
||||
"JAX_ImageSizeMultiplier",
|
||||
"JAX_KritaCanvas",
|
||||
"JAX_KritaImageLayer",
|
||||
"JAX_KritaMaskLayer",
|
||||
"JAX_KritaOutput",
|
||||
"JAX_KritaPipeIn",
|
||||
"JAX_KritaSelection",
|
||||
"JAX_KritaSendText",
|
||||
"JAX_KritaStrength",
|
||||
"JAX_KritaStyle",
|
||||
"JAX_Parameter",
|
||||
"JAX_SamplerPipeOut",
|
||||
"JAX_SendImageWebSocket"
|
||||
"JAX_SamplerPipeOut"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Jax-Nodes"
|
||||
@ -11837,6 +11858,7 @@
|
||||
"LatentSettings",
|
||||
"PipeHub",
|
||||
"PreviewMask",
|
||||
"UniversalLatentSettings",
|
||||
"cropImage"
|
||||
],
|
||||
{
|
||||
@ -12385,6 +12407,14 @@
|
||||
"title_aux": "ComfyUI-mnemic-nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/Maenvaeru/comfyui-vram-overlay": [
|
||||
[
|
||||
"MVU_VramOverlay"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-vram-overlay"
|
||||
}
|
||||
],
|
||||
"https://github.com/Makeezi/ComfyUI-promptLAB": [
|
||||
[
|
||||
"PromptLAB"
|
||||
@ -12642,6 +12672,7 @@
|
||||
"Place Image By Mask",
|
||||
"PreviewVideoMXD",
|
||||
"Prompt With Guidance (Flux)",
|
||||
"Save Image MXD",
|
||||
"SaveLatentMXD",
|
||||
"SaveLatent_I2V_MXD",
|
||||
"SaveVideoMXD",
|
||||
@ -12797,7 +12828,10 @@
|
||||
"PromptQueue",
|
||||
"PromptQueueFromFolder",
|
||||
"ResolutionSelectNode",
|
||||
"VRAMRAMCleanerNode"
|
||||
"TileCompositor",
|
||||
"TileManager",
|
||||
"VRAMRAMCleanerNode",
|
||||
"VisualMarqueeSelection"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Flow-Assistor"
|
||||
@ -13054,6 +13088,9 @@
|
||||
"Hex or 24 Bit Color",
|
||||
"Image Rotator",
|
||||
"Pose Image Setup",
|
||||
"PreviewImageAlpha",
|
||||
"ReplaceAlpha",
|
||||
"SaveImageSequenceZip",
|
||||
"VideoMaskEditor",
|
||||
"WAN Frame Calculator"
|
||||
],
|
||||
@ -14247,6 +14284,15 @@
|
||||
"title_aux": "ComfyUI OpenAI Node"
|
||||
}
|
||||
],
|
||||
"https://github.com/PROJECTMAD/PROJECT-MAD-NODES": [
|
||||
[
|
||||
"MultiScheduledLoraLoader",
|
||||
"VisualPromptGallery"
|
||||
],
|
||||
{
|
||||
"title_aux": "PROJECT-MAD-NODES"
|
||||
}
|
||||
],
|
||||
"https://github.com/Pablerdo/ComfyUI-MultiCutAndDrag": [
|
||||
[
|
||||
"BatchImageToMask",
|
||||
@ -15351,6 +15397,7 @@
|
||||
"Runware Audio Model Search",
|
||||
"Runware Audio Sections",
|
||||
"Runware Background Removal",
|
||||
"Runware BlackForest Labs Provider Settings",
|
||||
"Runware Bria Provider Settings",
|
||||
"Runware Bytedance Provider Settings",
|
||||
"Runware ControlNet",
|
||||
@ -15361,6 +15408,7 @@
|
||||
"Runware Embedding Search",
|
||||
"Runware Embeddings Combine",
|
||||
"Runware Frame Images",
|
||||
"Runware Google Provider Settings",
|
||||
"Runware IPAdapter",
|
||||
"Runware IPAdapters Combine",
|
||||
"Runware Image Caption",
|
||||
@ -15390,6 +15438,7 @@
|
||||
"Runware Refiner",
|
||||
"Runware Runway Provider Settings",
|
||||
"Runware Safety Inputs",
|
||||
"Runware Settings",
|
||||
"Runware Speech Inputs Combine",
|
||||
"Runware Sync Provider Settings",
|
||||
"Runware Sync Segment",
|
||||
@ -15411,9 +15460,11 @@
|
||||
"RunwareAudioInferenceInputs",
|
||||
"RunwareAudioInput",
|
||||
"RunwareAudioInputCombine",
|
||||
"RunwareBlackForestProviderSettings",
|
||||
"RunwareBriaProviderSettings",
|
||||
"RunwareBytedanceProviderSettings",
|
||||
"RunwareFrameImages",
|
||||
"RunwareGoogleProviderSettings",
|
||||
"RunwareKlingProviderSettings",
|
||||
"RunwareLightricksProviderSettings",
|
||||
"RunwareLumaProviderSettings",
|
||||
@ -15423,6 +15474,7 @@
|
||||
"RunwarePixverseProviderSettings",
|
||||
"RunwareRunwayProviderSettings",
|
||||
"RunwareSafetyInputs",
|
||||
"RunwareSettings",
|
||||
"RunwareSpeechInput",
|
||||
"RunwareSpeechInputCombine",
|
||||
"RunwareSyncProviderSettings",
|
||||
@ -16861,13 +16913,19 @@
|
||||
"https://github.com/ShootTheSound/comfyUI-Realtime-Lora": [
|
||||
[
|
||||
"ApplyTrainedLora",
|
||||
"FLUXSelectiveLoRALoader",
|
||||
"LoRALoaderWithAnalysis",
|
||||
"MusubiQwenImageEditLoraTrainer",
|
||||
"MusubiQwenImageLoraTrainer",
|
||||
"MusubiWanLoraTrainer",
|
||||
"MusubiZImageLoraTrainer",
|
||||
"QwenSelectiveLoRALoader",
|
||||
"RealtimeLoraTrainer",
|
||||
"SD15LoraTrainer",
|
||||
"SDXLLoraTrainer"
|
||||
"SDXLLoraTrainer",
|
||||
"SDXLSelectiveLoRALoader",
|
||||
"WanSelectiveLoRALoader",
|
||||
"ZImageSelectiveLoRALoader"
|
||||
],
|
||||
{
|
||||
"title_aux": "Realtime LoRA Trainer"
|
||||
@ -19613,8 +19671,10 @@
|
||||
"VividSharpen",
|
||||
"VividSharpenV2",
|
||||
"WASApplyLUT",
|
||||
"WASCameraMotionTrajectory",
|
||||
"WASChannelWaveform",
|
||||
"WASCombineLUT",
|
||||
"WASLatentUpscaleHybrid",
|
||||
"WASLoadLUT",
|
||||
"WASMoEConditioningListAppend",
|
||||
"WASSaveLUT",
|
||||
@ -21888,6 +21948,7 @@
|
||||
"https://github.com/ainewsto/Comfyui_Comfly_v2": [
|
||||
[
|
||||
"ComflyChatGPTApi",
|
||||
"ComflyGeminiTextOnly",
|
||||
"ComflyGoogelVeo3",
|
||||
"ComflyJimengApi",
|
||||
"ComflyJimengVideoApi",
|
||||
@ -22122,6 +22183,18 @@
|
||||
"title_aux": "comfyui-lora-hook-trigger"
|
||||
}
|
||||
],
|
||||
"https://github.com/akawana/ComfyUI-AK-XZ-Axis": [
|
||||
[
|
||||
"AK XZ Axis Plot",
|
||||
"AK XZ Batch Lora",
|
||||
"AK XZ Batch Prompts",
|
||||
"AK XZ Range Float",
|
||||
"AK XZ Range Int"
|
||||
],
|
||||
{
|
||||
"title_aux": "AK XZ Axis (XY for any KSampler)"
|
||||
}
|
||||
],
|
||||
"https://github.com/akawana/ComfyUI-Folded-Prompts": [
|
||||
[
|
||||
"FPFoldedPrompts",
|
||||
@ -24013,6 +24086,7 @@
|
||||
"BooleanControlOutput-beyond_nodes",
|
||||
"BooleanSwitch-beyond_nodes",
|
||||
"Compare-beyond_nodes",
|
||||
"Compositor3-beyond_nodes",
|
||||
"Compositor4-beyond_nodes",
|
||||
"Compositor4MasksOutput-beyond_nodes",
|
||||
"Compositor4TransformsOut-beyond_nodes",
|
||||
@ -24028,6 +24102,7 @@
|
||||
"MaskBoundingBox-beyond_nodes",
|
||||
"MaskRectArea-beyond_nodes",
|
||||
"MaskToImage-beyond_nodes",
|
||||
"RoundMask-beyond_nodes",
|
||||
"String-beyond_nodes",
|
||||
"TwoWaySwitch-beyond_nodes"
|
||||
],
|
||||
@ -27954,13 +28029,6 @@
|
||||
"PerturbedAttentionGuidance",
|
||||
"PhotoMakerEncode",
|
||||
"PhotoMakerLoader",
|
||||
"PikaImageToVideoNode2_2",
|
||||
"PikaScenesV2_2",
|
||||
"PikaStartEndFrameNode2_2",
|
||||
"PikaTextToVideoNode2_2",
|
||||
"Pikadditions",
|
||||
"Pikaffects",
|
||||
"Pikaswaps",
|
||||
"PixverseImageToVideoNode",
|
||||
"PixverseTemplateNode",
|
||||
"PixverseTextToVideoNode",
|
||||
@ -28213,6 +28281,7 @@
|
||||
"WanTrackToVideo",
|
||||
"WanVaceToVideo",
|
||||
"WebcamCapture",
|
||||
"ZImageFunControlnet",
|
||||
"unCLIPCheckpointLoader",
|
||||
"unCLIPConditioning",
|
||||
"wanBlockSwap"
|
||||
@ -32094,9 +32163,11 @@
|
||||
"FormattedString",
|
||||
"JSONOutputList",
|
||||
"KSamplerImmediateSave",
|
||||
"LoadFile",
|
||||
"NumberOutputList",
|
||||
"PickOutputLists",
|
||||
"StringOutputList"
|
||||
"SpreadsheetOutputList",
|
||||
"StringOutputList",
|
||||
"XyzGridPlot"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-outputlists-combiner"
|
||||
@ -33530,6 +33601,7 @@
|
||||
"WWAA_NestedLoopCounter",
|
||||
"WWAA_NumberRangeAsString",
|
||||
"WWAA_PromptWriter",
|
||||
"WWAA_SaveJPEG",
|
||||
"WWAA_SearchReplaceMulti",
|
||||
"WWAA_SearchReplaceText",
|
||||
"WWAA_SlicedArt",
|
||||
@ -33629,12 +33701,15 @@
|
||||
],
|
||||
"https://github.com/hobinrude/ComfyUI_DWposeDeluxe": [
|
||||
[
|
||||
"BatchKeypoints",
|
||||
"CustomOptions",
|
||||
"DWposeDeluxeNode",
|
||||
"FrameNumberNode",
|
||||
"KeypointConverter",
|
||||
"KeypointPrinter",
|
||||
"KeypointRangeFromBatch",
|
||||
"LoadPoseKeypoints",
|
||||
"MergeKeypoints",
|
||||
"PoseInterpolation",
|
||||
"PoseResize"
|
||||
],
|
||||
@ -37310,6 +37385,7 @@
|
||||
],
|
||||
"https://github.com/kijai/ComfyUI-SCAIL-Pose": [
|
||||
[
|
||||
"ConvertOpenPoseKeypointsToDWPose",
|
||||
"PoseDetectionVitPoseToDWPose",
|
||||
"RenderNLFPoses"
|
||||
],
|
||||
@ -37397,6 +37473,8 @@
|
||||
"WanVideoAddOviAudioToLatents",
|
||||
"WanVideoAddPusaNoise",
|
||||
"WanVideoAddS2VEmbeds",
|
||||
"WanVideoAddSCAILPoseEmbeds",
|
||||
"WanVideoAddSCAILReferenceEmbeds",
|
||||
"WanVideoAddStandInLatent",
|
||||
"WanVideoAddSteadyDancerEmbeds",
|
||||
"WanVideoAddTTMLatents",
|
||||
@ -38019,6 +38097,52 @@
|
||||
"title_aux": "Leon's Utility and API Integration Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/laboratoiresonore/ComfyUI_PerformanceLab": [
|
||||
[
|
||||
"EndpointHealthCheck",
|
||||
"KoboldLLM",
|
||||
"KoboldLLMAdvanced",
|
||||
"LocalGenerator",
|
||||
"LocalGeneratorBatch",
|
||||
"MultiEndpointHealthCheck",
|
||||
"PerfLab_Analyzer",
|
||||
"PerfLab_AutoDetectGPU",
|
||||
"PerfLab_BenchmarkRunner",
|
||||
"PerfLab_BlackImageFix",
|
||||
"PerfLab_CapResolution",
|
||||
"PerfLab_Compare",
|
||||
"PerfLab_EndpointHealth",
|
||||
"PerfLab_FloatSwitch",
|
||||
"PerfLab_GeneratePrompt",
|
||||
"PerfLab_IntSwitch",
|
||||
"PerfLab_IterationTracker",
|
||||
"PerfLab_LoadWorkflow",
|
||||
"PerfLab_LowVRAMPreset",
|
||||
"PerfLab_ModelDetector",
|
||||
"PerfLab_NetworkScanner",
|
||||
"PerfLab_OneClickOptimize",
|
||||
"PerfLab_OptimizationLoop",
|
||||
"PerfLab_OptimizeCFG",
|
||||
"PerfLab_QueueWorkflow",
|
||||
"PerfLab_QuickStart",
|
||||
"PerfLab_ReduceBatch",
|
||||
"PerfLab_ReduceSteps",
|
||||
"PerfLab_Report",
|
||||
"PerfLab_ShowText",
|
||||
"PerfLab_SmartOptimize",
|
||||
"PerfLab_SmartPrompt",
|
||||
"PerfLab_SpeedPreset",
|
||||
"PerfLab_Switch",
|
||||
"PerfLab_TestModeToggle",
|
||||
"PerfLab_Timer",
|
||||
"PerfLab_VRAMMonitor",
|
||||
"RemoteComfyUI",
|
||||
"RemoteComfyUISimple"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_PerformanceLab"
|
||||
}
|
||||
],
|
||||
"https://github.com/lakkiy/ComfyUI-RWImageS3": [
|
||||
[
|
||||
"Is Mask Empty",
|
||||
@ -39108,6 +39232,15 @@
|
||||
"title_aux": "Comfyui_three_js"
|
||||
}
|
||||
],
|
||||
"https://github.com/logicalor/comfyui_multi_replace": [
|
||||
[
|
||||
"FindReplacePairs",
|
||||
"TextReplacer"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui_multi_replace"
|
||||
}
|
||||
],
|
||||
"https://github.com/logicalor/comfyui_text_to_pose": [
|
||||
[
|
||||
"ApplyT2IPoseAdapter",
|
||||
@ -42383,10 +42516,13 @@
|
||||
],
|
||||
"https://github.com/nilor-corp/nilor-nodes": [
|
||||
[
|
||||
"MediaStreamInput",
|
||||
"MediaStreamOutput",
|
||||
"Nilor Blur Analysis",
|
||||
"Nilor Categorize String",
|
||||
"Nilor Count Images In Directory",
|
||||
"Nilor Extract Filename from Path",
|
||||
"Nilor Image Resize v2",
|
||||
"Nilor Int To List Of Bools",
|
||||
"Nilor Interpolated Float List",
|
||||
"Nilor Inverse Map Float List",
|
||||
@ -42405,7 +42541,15 @@
|
||||
"Nilor Select Index From List",
|
||||
"Nilor Shuffle Image Batch",
|
||||
"Nilor To Sparse Index Method",
|
||||
"Nilor n Fractions of Int"
|
||||
"Nilor Wan Frame Trim",
|
||||
"Nilor Wan Tile Resolution",
|
||||
"Nilor n Fractions of Int",
|
||||
"NilorGroup",
|
||||
"NilorPreset",
|
||||
"NilorUserInput_Boolean",
|
||||
"NilorUserInput_Float",
|
||||
"NilorUserInput_Int",
|
||||
"NilorUserInput_String"
|
||||
],
|
||||
{
|
||||
"title_aux": "Nilor Nodes by Nilor Corp"
|
||||
@ -42568,6 +42712,16 @@
|
||||
"title_aux": "ComfyUI-TextOnSegs"
|
||||
}
|
||||
],
|
||||
"https://github.com/nobandegani/comfyui_ino_nodes": [
|
||||
[
|
||||
"InoBoolToSwitch",
|
||||
"InoBooleanEqual",
|
||||
"InoNotBoolean"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI Ino Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/nobrainX2/comfyUI-customDia": [
|
||||
[
|
||||
"Audio retimer",
|
||||
@ -44657,6 +44811,7 @@
|
||||
"PVL_fal_FluxPulid",
|
||||
"PVL_fal_FluxWithLoraPulID_API",
|
||||
"PVL_fal_FluxWithLora_API",
|
||||
"PVL_fal_Flux_Dev_Inpaint_API",
|
||||
"PVL_fal_KontextDevInpaint_API",
|
||||
"PVL_fal_KontextDevLora_API",
|
||||
"PVL_fal_KontextMaxMulti_API",
|
||||
@ -45342,6 +45497,14 @@
|
||||
"title_aux": "Comfyui_saveimage_imgbb"
|
||||
}
|
||||
],
|
||||
"https://github.com/revisiontony/LoraMangerWebFrame": [
|
||||
[
|
||||
"LoraWebFrame"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI Lora Manager Web Frame"
|
||||
}
|
||||
],
|
||||
"https://github.com/rgthree/rgthree-comfy": [
|
||||
[
|
||||
"RgthreeAnySwitch",
|
||||
@ -48119,6 +48282,7 @@
|
||||
],
|
||||
"https://github.com/sonnybox/ComfyUI-SuperNodes": [
|
||||
[
|
||||
"SigmaSmoother",
|
||||
"SuperCreateTiles",
|
||||
"SuperSVRCalcTiles",
|
||||
"SuperStitchTiles"
|
||||
@ -49370,6 +49534,18 @@
|
||||
"title_aux": "ComfyUI-CSM-Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/thezveroboy/ComfyUI-ClipReshaper": [
|
||||
[
|
||||
"CR_ConditioningAssertDim",
|
||||
"CR_ConditioningInspect",
|
||||
"CR_ConditioningLinearProject",
|
||||
"CR_ConditioningPadOrSlice",
|
||||
"CR_SDXLMetadataEnsure"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-ClipReshaper"
|
||||
}
|
||||
],
|
||||
"https://github.com/thezveroboy/ComfyUI-WAN-ClipSkip": [
|
||||
[
|
||||
"CLIPSkip"
|
||||
@ -49429,7 +49605,9 @@
|
||||
],
|
||||
"https://github.com/thnikk/comfyui-thnikk-utils": [
|
||||
[
|
||||
"BaseNode",
|
||||
"CharacterPresetNode",
|
||||
"ConditionalLoraFullPipe",
|
||||
"DetailerNode",
|
||||
"DetailerPipeNode",
|
||||
"FullPipeIn",
|
||||
@ -49437,6 +49615,7 @@
|
||||
"FullPipeOut",
|
||||
"ModelPresetNode",
|
||||
"MultiStringConditioning",
|
||||
"PromptConditioningNode",
|
||||
"ResolutionSelector",
|
||||
"SeedWithOverride",
|
||||
"StylePresetNode",
|
||||
@ -49686,6 +49865,15 @@
|
||||
"title_aux": "ComfyUI-Z-Image-Turbo"
|
||||
}
|
||||
],
|
||||
"https://github.com/tppp2806/ComfyUI-YoloTrack": [
|
||||
[
|
||||
"YOLODetectionNode",
|
||||
"YOLOTrackingNode"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-YoloTrack"
|
||||
}
|
||||
],
|
||||
"https://github.com/traugdor/ComfyUI-Riffusion": [
|
||||
[
|
||||
"RiffusionNode",
|
||||
@ -50868,6 +51056,8 @@
|
||||
"NexaServiceStatus",
|
||||
"RemoteAPIConfig",
|
||||
"RemoteTextModelSelector",
|
||||
"RemoteVisionAnalysis",
|
||||
"RemoteVisionModelConfig",
|
||||
"SystemPromptConfig",
|
||||
"TextGeneration",
|
||||
"TextGenerationNode",
|
||||
@ -51310,7 +51500,10 @@
|
||||
],
|
||||
"https://github.com/wildminder/ComfyUI-VoxCPM": [
|
||||
[
|
||||
"VoxCPM_TTS"
|
||||
"VoxCPM_DatasetMaker",
|
||||
"VoxCPM_LoraTrainer",
|
||||
"VoxCPM_TTS",
|
||||
"VoxCPM_TrainConfig"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-VoxCPM"
|
||||
@ -51338,7 +51531,7 @@
|
||||
"LoraStacker",
|
||||
"PromptLoraManager",
|
||||
"SamplerCustomAdvanced",
|
||||
"SaveImage",
|
||||
"SaveImageLM",
|
||||
"TSC_EfficientLoader",
|
||||
"TriggerWordToggle",
|
||||
"VAEDecode",
|
||||
@ -52085,8 +52278,6 @@
|
||||
"AudioBeforeAfterSilence",
|
||||
"AutioInfo",
|
||||
"AutioPath",
|
||||
"ChildWorkflowNodes",
|
||||
"ChildWorkflowParameters",
|
||||
"DoWhileEnd",
|
||||
"DoWhileStart",
|
||||
"EasyPromptSelecto",
|
||||
|
||||
15780
github-stats-cache.json
15780
github-stats-cache.json
File diff suppressed because it is too large
Load Diff
8300
github-stats.json
8300
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,75 @@
|
||||
{
|
||||
"custom_nodes": [
|
||||
{
|
||||
"author": "edvardtoth",
|
||||
"title": "ComfyUI-ETNodes",
|
||||
"reference": "https://github.com/edvardtoth/ComfyUI-ETNodes",
|
||||
"files": [
|
||||
"https://github.com/edvardtoth/ComfyUI-ETNodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: ETNodes-Color-Selector, ETNodes-Gemini-API-Image, ETNodes-Gemini-API-Text, ETNodes-List-Items, ETNodes-List-Selector, ETNodes-Text-Previe"
|
||||
},
|
||||
{
|
||||
"author": "jtydhr88",
|
||||
"title": "ComfyUI-PolotnoCanvasEditor [UNSAFE]",
|
||||
"reference": "https://github.com/jtydhr88/ComfyUI-PolotnoCanvasEditor",
|
||||
"files": [
|
||||
"https://github.com/jtydhr88/ComfyUI-PolotnoCanvasEditor"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Integrates Polotno Canvas Editor into ComfyUI for advanced image editing and design.[w/This nodepack contains a path traversal vulnerability.]"
|
||||
},
|
||||
{
|
||||
"author": "Taremin",
|
||||
"title": "comfyui-remove-print",
|
||||
"reference": "https://github.com/Taremin/comfyui-remove-print",
|
||||
"files": [
|
||||
"https://github.com/Taremin/comfyui-remove-print"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI extension for removing or suppressing print statements in node output. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "JiangAogo",
|
||||
"title": "ComfyUI-Gemini-API [WIP]",
|
||||
"reference": "https://github.com/JiangAogo/ComfyUI-Gemini-API",
|
||||
"files": [
|
||||
"https://github.com/JiangAogo/ComfyUI-Gemini-API"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for Google Gemini API integration, supporting both text generation (LLM) and image generation.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "AprEcho",
|
||||
"title": "ComfyUI-RandomSeed",
|
||||
"reference": "https://github.com/AprEcho/ComfyUI-RandomSeed",
|
||||
"files": [
|
||||
"https://github.com/AprEcho/ComfyUI-RandomSeed"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Generates random seed values for ComfyUI workflows. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "Suzu008",
|
||||
"title": "ComfyUI-ImageCritic",
|
||||
"reference": "https://github.com/Suzu008/ComfyUI-ImageCritic",
|
||||
"files": [
|
||||
"https://github.com/Suzu008/ComfyUI-ImageCritic"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node for image analysis and evaluation. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "AndSni",
|
||||
"title": "Comfy-FL-Nodes",
|
||||
"reference": "https://github.com/AndSni/Comfy-FL-Nodes",
|
||||
"files": [
|
||||
"https://github.com/AndSni/Comfy-FL-Nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Generates human characters for commerce applications in ComfyUI. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "Spicely",
|
||||
"title": "[WIP] ComfyUI-Luma",
|
||||
@ -39,16 +109,6 @@
|
||||
],
|
||||
"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",
|
||||
|
||||
@ -941,6 +941,14 @@
|
||||
"title_aux": "AmorForge"
|
||||
}
|
||||
],
|
||||
"https://github.com/AndSni/Comfy-FL-Nodes": [
|
||||
[
|
||||
"CommerceHumanGenerator"
|
||||
],
|
||||
{
|
||||
"title_aux": "Comfy-FL-Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/Anonymzx/ComfyUI-Indonesia-TTS": [
|
||||
[
|
||||
"Facebook MMS-TTS-IND Variants FX"
|
||||
@ -967,6 +975,14 @@
|
||||
"title_aux": "ComfyUI_deepDeband [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/AprEcho/ComfyUI-RandomSeed": [
|
||||
[
|
||||
"RandomSeed"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-RandomSeed"
|
||||
}
|
||||
],
|
||||
"https://github.com/ArmandAlbert/Kwai_font_comfyui": [
|
||||
[
|
||||
"Kwaifont_Image_Cropper",
|
||||
@ -2259,6 +2275,15 @@
|
||||
"title_aux": "ComfyUI-yolov5-face [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/JiangAogo/ComfyUI-Gemini-API": [
|
||||
[
|
||||
"GeminiImageGenerator",
|
||||
"GeminiLLM"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Gemini-API [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/Jiffies-64/ComfyUI-SaveImagePlus": [
|
||||
[
|
||||
"SaveImagePlus"
|
||||
@ -4682,6 +4707,14 @@
|
||||
"title_aux": "comfyui_flowrider_nodes [UNSAFE]"
|
||||
}
|
||||
],
|
||||
"https://github.com/Suzu008/ComfyUI-ImageCritic": [
|
||||
[
|
||||
"DetailEncoder"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-ImageCritic"
|
||||
}
|
||||
],
|
||||
"https://github.com/Symbiomatrix/Comfyui-Sort-Files": [
|
||||
[
|
||||
"ImageSaverSBM",
|
||||
@ -6810,13 +6843,6 @@
|
||||
"PerturbedAttentionGuidance",
|
||||
"PhotoMakerEncode",
|
||||
"PhotoMakerLoader",
|
||||
"PikaImageToVideoNode2_2",
|
||||
"PikaScenesV2_2",
|
||||
"PikaStartEndFrameNode2_2",
|
||||
"PikaTextToVideoNode2_2",
|
||||
"Pikadditions",
|
||||
"Pikaffects",
|
||||
"Pikaswaps",
|
||||
"PixverseImageToVideoNode",
|
||||
"PixverseTemplateNode",
|
||||
"PixverseTextToVideoNode",
|
||||
@ -7069,6 +7095,7 @@
|
||||
"WanTrackToVideo",
|
||||
"WanVaceToVideo",
|
||||
"WebcamCapture",
|
||||
"ZImageFunControlnet",
|
||||
"unCLIPCheckpointLoader",
|
||||
"unCLIPConditioning",
|
||||
"wanBlockSwap"
|
||||
@ -7525,6 +7552,19 @@
|
||||
"title_aux": "ComfyUI-Sysinfo"
|
||||
}
|
||||
],
|
||||
"https://github.com/edvardtoth/ComfyUI-ETNodes": [
|
||||
[
|
||||
"ETNodes-Color-Selector",
|
||||
"ETNodes-Gemini-API-Image",
|
||||
"ETNodes-Gemini-API-Text",
|
||||
"ETNodes-List-Items",
|
||||
"ETNodes-List-Selector",
|
||||
"ETNodes-Text-Preview"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-ETNodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/eggsbenedicto/DiffusionRenderer-ComfyUI": [
|
||||
[
|
||||
"Cosmos1ForwardRenderer",
|
||||
@ -8195,6 +8235,7 @@
|
||||
"HolafShortcut",
|
||||
"HolafShortcutUser",
|
||||
"HolafTiledKSampler",
|
||||
"HolafVideoPreview",
|
||||
"UpscaleImageHolaf"
|
||||
],
|
||||
{
|
||||
@ -9915,11 +9956,19 @@
|
||||
[
|
||||
"DiffusersImageEditGenerator",
|
||||
"DiffusersImageGenerator",
|
||||
"DiffusersLoadLoraOnly",
|
||||
"DiffusersLoraLayersOperation",
|
||||
"DiffusersLoraLoader",
|
||||
"DiffusersLoraStatViewer",
|
||||
"DiffusersLoraUnloader",
|
||||
"DiffusersMergeLoraToPipeline",
|
||||
"DiffusersModelLoader",
|
||||
"DiffusersPipeline",
|
||||
"DiffusersPipelineBuilder",
|
||||
"DiffusersPreprocessorLoader",
|
||||
"DiffusersSampling",
|
||||
"DiffusersSaveLora",
|
||||
"DiffusersTextEncode",
|
||||
"DiffusersTextEncoderLoader",
|
||||
"DiffusersTokenizerLoader",
|
||||
"DiffusersTransformerLoader",
|
||||
@ -11875,6 +11924,7 @@
|
||||
],
|
||||
"https://github.com/silveroxides/ComfyUI_SamplingUtils": [
|
||||
[
|
||||
"Frakturpad",
|
||||
"GetJsonKeyValue",
|
||||
"ImageBlendByMask",
|
||||
"Image_Color_Noise",
|
||||
@ -12358,14 +12408,6 @@
|
||||
"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",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,106 @@
|
||||
{
|
||||
"custom_nodes": [
|
||||
{
|
||||
"author": "PROJECTMAD",
|
||||
"title": "PROJECT-MAD-NODES",
|
||||
"reference": "https://github.com/PROJECTMAD/PROJECT-MAD-NODES",
|
||||
"files": [
|
||||
"https://github.com/PROJECTMAD/PROJECT-MAD-NODES"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Collection of custom ComfyUI nodes for LoRA scheduling and prompt management, featuring visual curve editor and visual prompt gallery with EXIF metadata extraction."
|
||||
},
|
||||
{
|
||||
"author": "TheArtOfficial",
|
||||
"title": "ComfyUI-Nitra",
|
||||
"reference": "https://github.com/TheArtOfficial/ComfyUI-Nitra",
|
||||
"files": [
|
||||
"https://github.com/TheArtOfficial/ComfyUI-Nitra"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nitra custom node for ComfyUI"
|
||||
},
|
||||
{
|
||||
"author": "akawana",
|
||||
"title": "AK XZ Axis (XY for any KSampler)",
|
||||
"reference": "https://github.com/akawana/ComfyUI-AK-XZ-Axis",
|
||||
"files": [
|
||||
"https://github.com/akawana/ComfyUI-AK-XZ-Axis"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes for XY-style testing of parameters such as seed, steps, cfg, denoise, prompts, and LoRAs. Does not require a custom KSampler and works with any KSampler, including the default ComfyUI one.",
|
||||
"tags": ["xy_plot", "xy", "xz", "testing", "ksampler"]
|
||||
},
|
||||
{
|
||||
"author": "tppp2806",
|
||||
"title": "ComfyUI-YoloTrack",
|
||||
"reference": "https://github.com/tppp2806/ComfyUI-YoloTrack",
|
||||
"files": [
|
||||
"https://github.com/tppp2806/ComfyUI-YoloTrack"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Based on a YOLO model, it performs object detection, capture, and smooth tracking-based cropping on images."
|
||||
},
|
||||
{
|
||||
"author": "Maenvaeru",
|
||||
"title": "comfyui-vram-overlay",
|
||||
"reference": "https://github.com/Maenvaeru/comfyui-vram-overlay",
|
||||
"files": [
|
||||
"https://github.com/Maenvaeru/comfyui-vram-overlay"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Professional VRAM monitoring overlay for ComfyUI that displays real-time GPU memory usage as an independent, non-intrusive window. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "revisiontony",
|
||||
"title": "ComfyUI Lora Manager Web Frame",
|
||||
"reference": "https://github.com/revisiontony/LoraMangerWebFrame",
|
||||
"files": [
|
||||
"https://github.com/revisiontony/LoraMangerWebFrame"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Embeds the ComfyUI-Lora-Manager web interface directly into your ComfyUI workflow graph, eliminating the need for a separate browser tab."
|
||||
},
|
||||
{
|
||||
"author": "HM-RunningHub",
|
||||
"title": "ComfyUI_RH_LLM_API",
|
||||
"reference": "https://github.com/HM-RunningHub/ComfyUI_RH_LLM_API",
|
||||
"files": [
|
||||
"https://github.com/HM-RunningHub/ComfyUI_RH_LLM_API"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "An easy-to-use ComfyUI plugin for LLM integration supporting DeepSeek, OpenAI API-compatible models, with video reverse-prompt (captioning) capabilities. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "logicalor",
|
||||
"title": "comfyui_multi_replace",
|
||||
"reference": "https://github.com/logicalor/comfyui_multi_replace",
|
||||
"files": [
|
||||
"https://github.com/logicalor/comfyui_multi_replace"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes for creating and applying multiple find/replace pairs to text"
|
||||
},
|
||||
{
|
||||
"author": "thezveroboy",
|
||||
"title": "ComfyUI-ClipReshaper",
|
||||
"reference": "https://github.com/thezveroboy/ComfyUI-ClipReshaper",
|
||||
"files": [
|
||||
"https://github.com/thezveroboy/ComfyUI-ClipReshaper"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes to reshape/project Conditioning tensors and ensure SDXL conditioning metadata."
|
||||
},
|
||||
{
|
||||
"author": "laboratoiresonore",
|
||||
"title": "ComfyUI_PerformanceLab",
|
||||
"reference": "https://github.com/laboratoiresonore/ComfyUI_PerformanceLab",
|
||||
"files": [
|
||||
"https://github.com/laboratoiresonore/ComfyUI_PerformanceLab"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Make any ComfyUI workflow faster, use less VRAM, or produce better quality - with AI assistance"
|
||||
},
|
||||
{
|
||||
"author": "SanDiegoDude",
|
||||
"title": "SCG_LocalVLM",
|
||||
@ -597,106 +698,6 @@
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Essential utility nodes for ComfyUI including prompt queue, batch processing, camera angle control, and resolution selector. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "Zeknes",
|
||||
"title": "Comfyui-LLM-Chat",
|
||||
"reference": "https://github.com/Zeknes/Comfyui-LLM-Chat",
|
||||
"files": [
|
||||
"https://github.com/Zeknes/Comfyui-LLM-Chat"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom ComfyUI node providing unified access to multiple Large Language Models including OpenAI-compatible APIs and local Ollama instances with image support."
|
||||
},
|
||||
{
|
||||
"author": "comrender",
|
||||
"title": "ComfyUI-NanoB-Edit-Gemini",
|
||||
"reference": "https://github.com/comrender/ComfyUI-NanoB-Edit-Gemini",
|
||||
"files": [
|
||||
"https://github.com/comrender/ComfyUI-NanoB-Edit-Gemini"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This custom node facilitates direct interaction with the Google Gemini API for advanced image editing tasks within ComfyUI with parallel request handling."
|
||||
},
|
||||
{
|
||||
"author": "systemaiofinterest-wq",
|
||||
"title": "ComfyUI-MetaAI",
|
||||
"reference": "https://github.com/systemaiofinterest-wq/ComfyUI-MetaAI",
|
||||
"files": [
|
||||
"https://github.com/systemaiofinterest-wq/ComfyUI-MetaAI"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Unofficial ComfyUI environment using web scraping methods to enable Meta AI integration for text-to-image and image-to-video generation. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "phaserblast",
|
||||
"title": "ComfyUI-DGXSparkSafetensorsLoader",
|
||||
"reference": "https://github.com/phaserblast/ComfyUI-DGXSparkSafetensorsLoader",
|
||||
"files": [
|
||||
"https://github.com/phaserblast/ComfyUI-DGXSparkSafetensorsLoader"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI model loader that uses the fastsafetensors library to perform very fast, zero-copy loading from storage to VRAM."
|
||||
},
|
||||
{
|
||||
"author": "maxczc",
|
||||
"title": "comfyui-sora-node",
|
||||
"reference": "https://github.com/maxczc/comfyui-sora-node",
|
||||
"files": [
|
||||
"https://github.com/maxczc/comfyui-sora-node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Comprehensive set of ComfyUI custom nodes for interacting with a Sora-compatible REST API, supporting text-to-video, image-to-video, and video-to-video generation."
|
||||
},
|
||||
{
|
||||
"author": "bombdefuser-124",
|
||||
"title": "Newbie-Teacache-ComfyUI",
|
||||
"reference": "https://github.com/bombdefuser-124/Newbie-Teacache-ComfyUI",
|
||||
"files": [
|
||||
"https://github.com/bombdefuser-124/Newbie-Teacache-ComfyUI"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "TeaCache optimization nodes for ComfyUI's NewBie implementation, featuring patched loader and coefficient calculator for faster inference with configurable quality. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "SiegeKeebsOffical",
|
||||
"title": "comfyui-lmstudio",
|
||||
"reference": "https://github.com/SiegeKeebsOffical/comfyui-lmstudio",
|
||||
"files": [
|
||||
"https://github.com/SiegeKeebsOffical/comfyui-lmstudio"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom ComfyUI nodes designed to interface with a separate LM Studio instance for language model operations."
|
||||
},
|
||||
{
|
||||
"author": "XYMikky12138",
|
||||
"title": "ComfyUI-MIKKY-Mask-Editor",
|
||||
"reference": "https://github.com/XYMikky12138/ComfyUI-MIKKY-Mask-Editor",
|
||||
"files": [
|
||||
"https://github.com/XYMikky12138/ComfyUI-MIKKY-Mask-Editor"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A powerful frame-by-frame video mask editor for ComfyUI with painting, auto BBox, hole filling, blur/feathering, and video slicing features."
|
||||
},
|
||||
{
|
||||
"author": "thnikk",
|
||||
"title": "comfyui-thnikk-utils",
|
||||
"reference": "https://github.com/thnikk/comfyui-thnikk-utils",
|
||||
"files": [
|
||||
"https://github.com/thnikk/comfyui-thnikk-utils"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes to clean up your workflow."
|
||||
},
|
||||
{
|
||||
"author": "bedovyy",
|
||||
"title": "ComfyUI-LLM-Helper",
|
||||
"reference": "https://github.com/bedovyy/ComfyUI-LLM-Helper",
|
||||
"files": [
|
||||
"https://github.com/bedovyy/ComfyUI-LLM-Helper"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A collection of helper nodes for working with LLM APIs in ComfyUI, intended to complement other LLM custom nodes."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@ -2920,6 +2920,7 @@
|
||||
"FluxKontextProNode",
|
||||
"GPTImageEditNode",
|
||||
"GeminiChatNode",
|
||||
"GeminiDiarisationAPI",
|
||||
"GeminiSegmentationNode",
|
||||
"GeminiTTSNode",
|
||||
"GoogleImagenEditNode",
|
||||
@ -2938,8 +2939,8 @@
|
||||
"GeminiDiarisationNode",
|
||||
"GeminiSegmentationVertexNode",
|
||||
"GeminiTTSVertexNode",
|
||||
"GoogleImagenEditNode",
|
||||
"GoogleImagenNode",
|
||||
"GoogleImagenEditVertex",
|
||||
"GoogleImagenVertex",
|
||||
"GoogleVeoVertexVideoGenerator",
|
||||
"NanoBananaVertexNode"
|
||||
],
|
||||
@ -3885,11 +3886,18 @@
|
||||
"BriaEraser",
|
||||
"BriaGenFill",
|
||||
"BriaTailoredGen",
|
||||
"GenerateImageLiteNodeV2",
|
||||
"GenerateImageNodeV2",
|
||||
"GenerateStructuredPromptLiteNodeV2",
|
||||
"GenerateStructuredPromptNodeV2",
|
||||
"ImageExpansionNode",
|
||||
"LoadVideoFramesNode",
|
||||
"PreviewVideoURLNode",
|
||||
"RefineImageLiteNodeV2",
|
||||
"RefineImageNodeV2",
|
||||
"ReimagineNode",
|
||||
"RemoveForegroundNode",
|
||||
"RemoveVideoBackgroundNode",
|
||||
"ReplaceBgNode",
|
||||
"RmbgNode",
|
||||
"ShotByImageAutomatic",
|
||||
@ -3908,7 +3916,12 @@
|
||||
"TailoredPortraitNode",
|
||||
"Text2ImageBaseNode",
|
||||
"Text2ImageFastNode",
|
||||
"Text2ImageHDNode"
|
||||
"Text2ImageHDNode",
|
||||
"VideoEraseElementsNode",
|
||||
"VideoIncreaseResolutionNode",
|
||||
"VideoMaskByKeyPointsNode",
|
||||
"VideoMaskByPromptNode",
|
||||
"VideoSolidColorBackgroundNode"
|
||||
],
|
||||
{
|
||||
"title_aux": "BRIA AI API nodes"
|
||||
@ -4876,6 +4889,15 @@
|
||||
],
|
||||
{}
|
||||
],
|
||||
"https://github.com/ComfyUI/Base64_IO": [
|
||||
[
|
||||
"AnyToBase64",
|
||||
"Base64ToAny",
|
||||
"Base64ToConditioning",
|
||||
"Base64ToLatent"
|
||||
],
|
||||
{}
|
||||
],
|
||||
"https://github.com/ComfyUI/Eagleshadow": [
|
||||
[
|
||||
"Batch 12 Images",
|
||||
@ -8509,6 +8531,14 @@
|
||||
"title_aux": "ComfyUI IC-Custom Node"
|
||||
}
|
||||
],
|
||||
"https://github.com/HM-RunningHub/ComfyUI_RH_LLM_API": [
|
||||
[
|
||||
"RH_LLMAPI_NODE"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_RH_LLM_API"
|
||||
}
|
||||
],
|
||||
"https://github.com/HM-RunningHub/ComfyUI_RH_OminiControl": [
|
||||
[
|
||||
"RunningHub_Omini_Fill",
|
||||
@ -10666,18 +10696,9 @@
|
||||
"JAX_EasyPrompt",
|
||||
"JAX_EasyPromptSimple",
|
||||
"JAX_ImageSizeMultiplier",
|
||||
"JAX_KritaCanvas",
|
||||
"JAX_KritaImageLayer",
|
||||
"JAX_KritaMaskLayer",
|
||||
"JAX_KritaOutput",
|
||||
"JAX_KritaPipeIn",
|
||||
"JAX_KritaSelection",
|
||||
"JAX_KritaSendText",
|
||||
"JAX_KritaStrength",
|
||||
"JAX_KritaStyle",
|
||||
"JAX_Parameter",
|
||||
"JAX_SamplerPipeOut",
|
||||
"JAX_SendImageWebSocket"
|
||||
"JAX_SamplerPipeOut"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Jax-Nodes"
|
||||
@ -11837,6 +11858,7 @@
|
||||
"LatentSettings",
|
||||
"PipeHub",
|
||||
"PreviewMask",
|
||||
"UniversalLatentSettings",
|
||||
"cropImage"
|
||||
],
|
||||
{
|
||||
@ -12385,6 +12407,14 @@
|
||||
"title_aux": "ComfyUI-mnemic-nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/Maenvaeru/comfyui-vram-overlay": [
|
||||
[
|
||||
"MVU_VramOverlay"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-vram-overlay"
|
||||
}
|
||||
],
|
||||
"https://github.com/Makeezi/ComfyUI-promptLAB": [
|
||||
[
|
||||
"PromptLAB"
|
||||
@ -12642,6 +12672,7 @@
|
||||
"Place Image By Mask",
|
||||
"PreviewVideoMXD",
|
||||
"Prompt With Guidance (Flux)",
|
||||
"Save Image MXD",
|
||||
"SaveLatentMXD",
|
||||
"SaveLatent_I2V_MXD",
|
||||
"SaveVideoMXD",
|
||||
@ -12797,7 +12828,10 @@
|
||||
"PromptQueue",
|
||||
"PromptQueueFromFolder",
|
||||
"ResolutionSelectNode",
|
||||
"VRAMRAMCleanerNode"
|
||||
"TileCompositor",
|
||||
"TileManager",
|
||||
"VRAMRAMCleanerNode",
|
||||
"VisualMarqueeSelection"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Flow-Assistor"
|
||||
@ -13054,6 +13088,9 @@
|
||||
"Hex or 24 Bit Color",
|
||||
"Image Rotator",
|
||||
"Pose Image Setup",
|
||||
"PreviewImageAlpha",
|
||||
"ReplaceAlpha",
|
||||
"SaveImageSequenceZip",
|
||||
"VideoMaskEditor",
|
||||
"WAN Frame Calculator"
|
||||
],
|
||||
@ -14247,6 +14284,15 @@
|
||||
"title_aux": "ComfyUI OpenAI Node"
|
||||
}
|
||||
],
|
||||
"https://github.com/PROJECTMAD/PROJECT-MAD-NODES": [
|
||||
[
|
||||
"MultiScheduledLoraLoader",
|
||||
"VisualPromptGallery"
|
||||
],
|
||||
{
|
||||
"title_aux": "PROJECT-MAD-NODES"
|
||||
}
|
||||
],
|
||||
"https://github.com/Pablerdo/ComfyUI-MultiCutAndDrag": [
|
||||
[
|
||||
"BatchImageToMask",
|
||||
@ -15351,6 +15397,7 @@
|
||||
"Runware Audio Model Search",
|
||||
"Runware Audio Sections",
|
||||
"Runware Background Removal",
|
||||
"Runware BlackForest Labs Provider Settings",
|
||||
"Runware Bria Provider Settings",
|
||||
"Runware Bytedance Provider Settings",
|
||||
"Runware ControlNet",
|
||||
@ -15361,6 +15408,7 @@
|
||||
"Runware Embedding Search",
|
||||
"Runware Embeddings Combine",
|
||||
"Runware Frame Images",
|
||||
"Runware Google Provider Settings",
|
||||
"Runware IPAdapter",
|
||||
"Runware IPAdapters Combine",
|
||||
"Runware Image Caption",
|
||||
@ -15390,6 +15438,7 @@
|
||||
"Runware Refiner",
|
||||
"Runware Runway Provider Settings",
|
||||
"Runware Safety Inputs",
|
||||
"Runware Settings",
|
||||
"Runware Speech Inputs Combine",
|
||||
"Runware Sync Provider Settings",
|
||||
"Runware Sync Segment",
|
||||
@ -15411,9 +15460,11 @@
|
||||
"RunwareAudioInferenceInputs",
|
||||
"RunwareAudioInput",
|
||||
"RunwareAudioInputCombine",
|
||||
"RunwareBlackForestProviderSettings",
|
||||
"RunwareBriaProviderSettings",
|
||||
"RunwareBytedanceProviderSettings",
|
||||
"RunwareFrameImages",
|
||||
"RunwareGoogleProviderSettings",
|
||||
"RunwareKlingProviderSettings",
|
||||
"RunwareLightricksProviderSettings",
|
||||
"RunwareLumaProviderSettings",
|
||||
@ -15423,6 +15474,7 @@
|
||||
"RunwarePixverseProviderSettings",
|
||||
"RunwareRunwayProviderSettings",
|
||||
"RunwareSafetyInputs",
|
||||
"RunwareSettings",
|
||||
"RunwareSpeechInput",
|
||||
"RunwareSpeechInputCombine",
|
||||
"RunwareSyncProviderSettings",
|
||||
@ -16861,13 +16913,19 @@
|
||||
"https://github.com/ShootTheSound/comfyUI-Realtime-Lora": [
|
||||
[
|
||||
"ApplyTrainedLora",
|
||||
"FLUXSelectiveLoRALoader",
|
||||
"LoRALoaderWithAnalysis",
|
||||
"MusubiQwenImageEditLoraTrainer",
|
||||
"MusubiQwenImageLoraTrainer",
|
||||
"MusubiWanLoraTrainer",
|
||||
"MusubiZImageLoraTrainer",
|
||||
"QwenSelectiveLoRALoader",
|
||||
"RealtimeLoraTrainer",
|
||||
"SD15LoraTrainer",
|
||||
"SDXLLoraTrainer"
|
||||
"SDXLLoraTrainer",
|
||||
"SDXLSelectiveLoRALoader",
|
||||
"WanSelectiveLoRALoader",
|
||||
"ZImageSelectiveLoRALoader"
|
||||
],
|
||||
{
|
||||
"title_aux": "Realtime LoRA Trainer"
|
||||
@ -19613,8 +19671,10 @@
|
||||
"VividSharpen",
|
||||
"VividSharpenV2",
|
||||
"WASApplyLUT",
|
||||
"WASCameraMotionTrajectory",
|
||||
"WASChannelWaveform",
|
||||
"WASCombineLUT",
|
||||
"WASLatentUpscaleHybrid",
|
||||
"WASLoadLUT",
|
||||
"WASMoEConditioningListAppend",
|
||||
"WASSaveLUT",
|
||||
@ -21888,6 +21948,7 @@
|
||||
"https://github.com/ainewsto/Comfyui_Comfly_v2": [
|
||||
[
|
||||
"ComflyChatGPTApi",
|
||||
"ComflyGeminiTextOnly",
|
||||
"ComflyGoogelVeo3",
|
||||
"ComflyJimengApi",
|
||||
"ComflyJimengVideoApi",
|
||||
@ -22122,6 +22183,18 @@
|
||||
"title_aux": "comfyui-lora-hook-trigger"
|
||||
}
|
||||
],
|
||||
"https://github.com/akawana/ComfyUI-AK-XZ-Axis": [
|
||||
[
|
||||
"AK XZ Axis Plot",
|
||||
"AK XZ Batch Lora",
|
||||
"AK XZ Batch Prompts",
|
||||
"AK XZ Range Float",
|
||||
"AK XZ Range Int"
|
||||
],
|
||||
{
|
||||
"title_aux": "AK XZ Axis (XY for any KSampler)"
|
||||
}
|
||||
],
|
||||
"https://github.com/akawana/ComfyUI-Folded-Prompts": [
|
||||
[
|
||||
"FPFoldedPrompts",
|
||||
@ -24013,6 +24086,7 @@
|
||||
"BooleanControlOutput-beyond_nodes",
|
||||
"BooleanSwitch-beyond_nodes",
|
||||
"Compare-beyond_nodes",
|
||||
"Compositor3-beyond_nodes",
|
||||
"Compositor4-beyond_nodes",
|
||||
"Compositor4MasksOutput-beyond_nodes",
|
||||
"Compositor4TransformsOut-beyond_nodes",
|
||||
@ -24028,6 +24102,7 @@
|
||||
"MaskBoundingBox-beyond_nodes",
|
||||
"MaskRectArea-beyond_nodes",
|
||||
"MaskToImage-beyond_nodes",
|
||||
"RoundMask-beyond_nodes",
|
||||
"String-beyond_nodes",
|
||||
"TwoWaySwitch-beyond_nodes"
|
||||
],
|
||||
@ -27954,13 +28029,6 @@
|
||||
"PerturbedAttentionGuidance",
|
||||
"PhotoMakerEncode",
|
||||
"PhotoMakerLoader",
|
||||
"PikaImageToVideoNode2_2",
|
||||
"PikaScenesV2_2",
|
||||
"PikaStartEndFrameNode2_2",
|
||||
"PikaTextToVideoNode2_2",
|
||||
"Pikadditions",
|
||||
"Pikaffects",
|
||||
"Pikaswaps",
|
||||
"PixverseImageToVideoNode",
|
||||
"PixverseTemplateNode",
|
||||
"PixverseTextToVideoNode",
|
||||
@ -28213,6 +28281,7 @@
|
||||
"WanTrackToVideo",
|
||||
"WanVaceToVideo",
|
||||
"WebcamCapture",
|
||||
"ZImageFunControlnet",
|
||||
"unCLIPCheckpointLoader",
|
||||
"unCLIPConditioning",
|
||||
"wanBlockSwap"
|
||||
@ -32094,9 +32163,11 @@
|
||||
"FormattedString",
|
||||
"JSONOutputList",
|
||||
"KSamplerImmediateSave",
|
||||
"LoadFile",
|
||||
"NumberOutputList",
|
||||
"PickOutputLists",
|
||||
"StringOutputList"
|
||||
"SpreadsheetOutputList",
|
||||
"StringOutputList",
|
||||
"XyzGridPlot"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-outputlists-combiner"
|
||||
@ -33530,6 +33601,7 @@
|
||||
"WWAA_NestedLoopCounter",
|
||||
"WWAA_NumberRangeAsString",
|
||||
"WWAA_PromptWriter",
|
||||
"WWAA_SaveJPEG",
|
||||
"WWAA_SearchReplaceMulti",
|
||||
"WWAA_SearchReplaceText",
|
||||
"WWAA_SlicedArt",
|
||||
@ -33629,12 +33701,15 @@
|
||||
],
|
||||
"https://github.com/hobinrude/ComfyUI_DWposeDeluxe": [
|
||||
[
|
||||
"BatchKeypoints",
|
||||
"CustomOptions",
|
||||
"DWposeDeluxeNode",
|
||||
"FrameNumberNode",
|
||||
"KeypointConverter",
|
||||
"KeypointPrinter",
|
||||
"KeypointRangeFromBatch",
|
||||
"LoadPoseKeypoints",
|
||||
"MergeKeypoints",
|
||||
"PoseInterpolation",
|
||||
"PoseResize"
|
||||
],
|
||||
@ -37310,6 +37385,7 @@
|
||||
],
|
||||
"https://github.com/kijai/ComfyUI-SCAIL-Pose": [
|
||||
[
|
||||
"ConvertOpenPoseKeypointsToDWPose",
|
||||
"PoseDetectionVitPoseToDWPose",
|
||||
"RenderNLFPoses"
|
||||
],
|
||||
@ -37397,6 +37473,8 @@
|
||||
"WanVideoAddOviAudioToLatents",
|
||||
"WanVideoAddPusaNoise",
|
||||
"WanVideoAddS2VEmbeds",
|
||||
"WanVideoAddSCAILPoseEmbeds",
|
||||
"WanVideoAddSCAILReferenceEmbeds",
|
||||
"WanVideoAddStandInLatent",
|
||||
"WanVideoAddSteadyDancerEmbeds",
|
||||
"WanVideoAddTTMLatents",
|
||||
@ -38019,6 +38097,52 @@
|
||||
"title_aux": "Leon's Utility and API Integration Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/laboratoiresonore/ComfyUI_PerformanceLab": [
|
||||
[
|
||||
"EndpointHealthCheck",
|
||||
"KoboldLLM",
|
||||
"KoboldLLMAdvanced",
|
||||
"LocalGenerator",
|
||||
"LocalGeneratorBatch",
|
||||
"MultiEndpointHealthCheck",
|
||||
"PerfLab_Analyzer",
|
||||
"PerfLab_AutoDetectGPU",
|
||||
"PerfLab_BenchmarkRunner",
|
||||
"PerfLab_BlackImageFix",
|
||||
"PerfLab_CapResolution",
|
||||
"PerfLab_Compare",
|
||||
"PerfLab_EndpointHealth",
|
||||
"PerfLab_FloatSwitch",
|
||||
"PerfLab_GeneratePrompt",
|
||||
"PerfLab_IntSwitch",
|
||||
"PerfLab_IterationTracker",
|
||||
"PerfLab_LoadWorkflow",
|
||||
"PerfLab_LowVRAMPreset",
|
||||
"PerfLab_ModelDetector",
|
||||
"PerfLab_NetworkScanner",
|
||||
"PerfLab_OneClickOptimize",
|
||||
"PerfLab_OptimizationLoop",
|
||||
"PerfLab_OptimizeCFG",
|
||||
"PerfLab_QueueWorkflow",
|
||||
"PerfLab_QuickStart",
|
||||
"PerfLab_ReduceBatch",
|
||||
"PerfLab_ReduceSteps",
|
||||
"PerfLab_Report",
|
||||
"PerfLab_ShowText",
|
||||
"PerfLab_SmartOptimize",
|
||||
"PerfLab_SmartPrompt",
|
||||
"PerfLab_SpeedPreset",
|
||||
"PerfLab_Switch",
|
||||
"PerfLab_TestModeToggle",
|
||||
"PerfLab_Timer",
|
||||
"PerfLab_VRAMMonitor",
|
||||
"RemoteComfyUI",
|
||||
"RemoteComfyUISimple"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_PerformanceLab"
|
||||
}
|
||||
],
|
||||
"https://github.com/lakkiy/ComfyUI-RWImageS3": [
|
||||
[
|
||||
"Is Mask Empty",
|
||||
@ -39108,6 +39232,15 @@
|
||||
"title_aux": "Comfyui_three_js"
|
||||
}
|
||||
],
|
||||
"https://github.com/logicalor/comfyui_multi_replace": [
|
||||
[
|
||||
"FindReplacePairs",
|
||||
"TextReplacer"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui_multi_replace"
|
||||
}
|
||||
],
|
||||
"https://github.com/logicalor/comfyui_text_to_pose": [
|
||||
[
|
||||
"ApplyT2IPoseAdapter",
|
||||
@ -42383,10 +42516,13 @@
|
||||
],
|
||||
"https://github.com/nilor-corp/nilor-nodes": [
|
||||
[
|
||||
"MediaStreamInput",
|
||||
"MediaStreamOutput",
|
||||
"Nilor Blur Analysis",
|
||||
"Nilor Categorize String",
|
||||
"Nilor Count Images In Directory",
|
||||
"Nilor Extract Filename from Path",
|
||||
"Nilor Image Resize v2",
|
||||
"Nilor Int To List Of Bools",
|
||||
"Nilor Interpolated Float List",
|
||||
"Nilor Inverse Map Float List",
|
||||
@ -42405,7 +42541,15 @@
|
||||
"Nilor Select Index From List",
|
||||
"Nilor Shuffle Image Batch",
|
||||
"Nilor To Sparse Index Method",
|
||||
"Nilor n Fractions of Int"
|
||||
"Nilor Wan Frame Trim",
|
||||
"Nilor Wan Tile Resolution",
|
||||
"Nilor n Fractions of Int",
|
||||
"NilorGroup",
|
||||
"NilorPreset",
|
||||
"NilorUserInput_Boolean",
|
||||
"NilorUserInput_Float",
|
||||
"NilorUserInput_Int",
|
||||
"NilorUserInput_String"
|
||||
],
|
||||
{
|
||||
"title_aux": "Nilor Nodes by Nilor Corp"
|
||||
@ -42568,6 +42712,16 @@
|
||||
"title_aux": "ComfyUI-TextOnSegs"
|
||||
}
|
||||
],
|
||||
"https://github.com/nobandegani/comfyui_ino_nodes": [
|
||||
[
|
||||
"InoBoolToSwitch",
|
||||
"InoBooleanEqual",
|
||||
"InoNotBoolean"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI Ino Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/nobrainX2/comfyUI-customDia": [
|
||||
[
|
||||
"Audio retimer",
|
||||
@ -44657,6 +44811,7 @@
|
||||
"PVL_fal_FluxPulid",
|
||||
"PVL_fal_FluxWithLoraPulID_API",
|
||||
"PVL_fal_FluxWithLora_API",
|
||||
"PVL_fal_Flux_Dev_Inpaint_API",
|
||||
"PVL_fal_KontextDevInpaint_API",
|
||||
"PVL_fal_KontextDevLora_API",
|
||||
"PVL_fal_KontextMaxMulti_API",
|
||||
@ -45342,6 +45497,14 @@
|
||||
"title_aux": "Comfyui_saveimage_imgbb"
|
||||
}
|
||||
],
|
||||
"https://github.com/revisiontony/LoraMangerWebFrame": [
|
||||
[
|
||||
"LoraWebFrame"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI Lora Manager Web Frame"
|
||||
}
|
||||
],
|
||||
"https://github.com/rgthree/rgthree-comfy": [
|
||||
[
|
||||
"RgthreeAnySwitch",
|
||||
@ -48119,6 +48282,7 @@
|
||||
],
|
||||
"https://github.com/sonnybox/ComfyUI-SuperNodes": [
|
||||
[
|
||||
"SigmaSmoother",
|
||||
"SuperCreateTiles",
|
||||
"SuperSVRCalcTiles",
|
||||
"SuperStitchTiles"
|
||||
@ -49370,6 +49534,18 @@
|
||||
"title_aux": "ComfyUI-CSM-Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/thezveroboy/ComfyUI-ClipReshaper": [
|
||||
[
|
||||
"CR_ConditioningAssertDim",
|
||||
"CR_ConditioningInspect",
|
||||
"CR_ConditioningLinearProject",
|
||||
"CR_ConditioningPadOrSlice",
|
||||
"CR_SDXLMetadataEnsure"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-ClipReshaper"
|
||||
}
|
||||
],
|
||||
"https://github.com/thezveroboy/ComfyUI-WAN-ClipSkip": [
|
||||
[
|
||||
"CLIPSkip"
|
||||
@ -49429,7 +49605,9 @@
|
||||
],
|
||||
"https://github.com/thnikk/comfyui-thnikk-utils": [
|
||||
[
|
||||
"BaseNode",
|
||||
"CharacterPresetNode",
|
||||
"ConditionalLoraFullPipe",
|
||||
"DetailerNode",
|
||||
"DetailerPipeNode",
|
||||
"FullPipeIn",
|
||||
@ -49437,6 +49615,7 @@
|
||||
"FullPipeOut",
|
||||
"ModelPresetNode",
|
||||
"MultiStringConditioning",
|
||||
"PromptConditioningNode",
|
||||
"ResolutionSelector",
|
||||
"SeedWithOverride",
|
||||
"StylePresetNode",
|
||||
@ -49686,6 +49865,15 @@
|
||||
"title_aux": "ComfyUI-Z-Image-Turbo"
|
||||
}
|
||||
],
|
||||
"https://github.com/tppp2806/ComfyUI-YoloTrack": [
|
||||
[
|
||||
"YOLODetectionNode",
|
||||
"YOLOTrackingNode"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-YoloTrack"
|
||||
}
|
||||
],
|
||||
"https://github.com/traugdor/ComfyUI-Riffusion": [
|
||||
[
|
||||
"RiffusionNode",
|
||||
@ -50868,6 +51056,8 @@
|
||||
"NexaServiceStatus",
|
||||
"RemoteAPIConfig",
|
||||
"RemoteTextModelSelector",
|
||||
"RemoteVisionAnalysis",
|
||||
"RemoteVisionModelConfig",
|
||||
"SystemPromptConfig",
|
||||
"TextGeneration",
|
||||
"TextGenerationNode",
|
||||
@ -51310,7 +51500,10 @@
|
||||
],
|
||||
"https://github.com/wildminder/ComfyUI-VoxCPM": [
|
||||
[
|
||||
"VoxCPM_TTS"
|
||||
"VoxCPM_DatasetMaker",
|
||||
"VoxCPM_LoraTrainer",
|
||||
"VoxCPM_TTS",
|
||||
"VoxCPM_TrainConfig"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-VoxCPM"
|
||||
@ -51338,7 +51531,7 @@
|
||||
"LoraStacker",
|
||||
"PromptLoraManager",
|
||||
"SamplerCustomAdvanced",
|
||||
"SaveImage",
|
||||
"SaveImageLM",
|
||||
"TSC_EfficientLoader",
|
||||
"TriggerWordToggle",
|
||||
"VAEDecode",
|
||||
@ -52085,8 +52278,6 @@
|
||||
"AudioBeforeAfterSilence",
|
||||
"AutioInfo",
|
||||
"AutioPath",
|
||||
"ChildWorkflowNodes",
|
||||
"ChildWorkflowParameters",
|
||||
"DoWhileEnd",
|
||||
"DoWhileStart",
|
||||
"EasyPromptSelecto",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user