mirror of
https://github.com/Comfy-Org/ComfyUI-Manager.git
synced 2026-01-31 00:10:16 +08:00
Merge branch 'ltdrdata:main' into main
This commit is contained in:
commit
a7aefa7718
27
README.md
27
README.md
@ -5,6 +5,7 @@
|
||||

|
||||
|
||||
## NOTICE
|
||||
* V2.33 Security policy is applied.
|
||||
* V2.21 [cm-cli](docs/en/cm-cli.md) tool is added.
|
||||
* V2.18 to V2.18.3 is not functioning due to a severe bug. Users on these versions are advised to promptly update to V2.18.4. Please navigate to the `ComfyUI/custom_nodes/ComfyUI-Manager` directory and execute `git pull` to update.
|
||||
* You can see whole nodes info on [ComfyUI Nodes Info](https://ltdrdata.github.io/) page.
|
||||
@ -191,6 +192,7 @@ This repository provides Colab notebooks that allow you to install and use Comfy
|
||||
* NOTE: Before submitting the PR after making changes, please check `Use local DB` and ensure that the extension list loads without any issues in the `Install custom nodes` dialog. Occasionally, missing or extra commas can lead to JSON syntax errors.
|
||||
* The remaining JSON will be updated through scripts in the future, so you don't need to worry about it.
|
||||
|
||||
|
||||
## Custom node support guide
|
||||
|
||||
* Currently, the system operates by cloning the git repository and sequentially installing the dependencies listed in requirements.txt using pip, followed by invoking the install.py script. In the future, we plan to discuss and determine the specifications for supporting custom nodes.
|
||||
@ -338,6 +340,31 @@ When you run the `scan.sh` script:
|
||||
* Edit `config.ini` file: add `windows_selector_event_loop_policy = True`
|
||||
|
||||
|
||||
## Security policy
|
||||
* Edit `config.ini` file: add `security_level = <LEVEL>`
|
||||
* `strong`
|
||||
* doesn't allow `high` and `middle` level risky feature
|
||||
* `normal`
|
||||
* doesn't allow `high` level risky feature if `--listen` is specified and not starts with `127.`
|
||||
* `middle` level risky feature is available
|
||||
* `weak`
|
||||
* all feature is available
|
||||
|
||||
* `high` level risky features
|
||||
* `Install via git url`, `pip install`
|
||||
* Installation of custom nodes registered not in the `default channel`.
|
||||
* Display terminal log
|
||||
|
||||
* `middle` level risky features
|
||||
* Uninstall/Update/Fix custom nodes
|
||||
* Installation of custom nodes registered in the `default channel`.
|
||||
* Restore/Remove Snapshot
|
||||
* Restart
|
||||
|
||||
* `low` level risky features
|
||||
* Update ComfyUI
|
||||
|
||||
|
||||
## TODO: Unconventional form of custom node list
|
||||
|
||||
* https://github.com/diontimmer/Sample-Diffusion-ComfyUI-Extension
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -416,6 +416,7 @@
|
||||
"IntToString-badger",
|
||||
"IntToStringAdvanced-badger",
|
||||
"LoadImageAdvanced-badger",
|
||||
"LoadImagesFromDirListAdvanced-badger",
|
||||
"SegmentToMaskByPoint-badger",
|
||||
"SimpleBoolean-badger",
|
||||
"StringToFizz-badger",
|
||||
@ -682,6 +683,7 @@
|
||||
"ComfyUIDeployExternalLora",
|
||||
"ComfyUIDeployExternalNumber",
|
||||
"ComfyUIDeployExternalNumberInt",
|
||||
"ComfyUIDeployExternalNumberSlider",
|
||||
"ComfyUIDeployExternalText",
|
||||
"ComfyUIDeployExternalVid",
|
||||
"ComfyUIDeployExternalVideo"
|
||||
@ -1123,8 +1125,13 @@
|
||||
[
|
||||
"Automatic CFG",
|
||||
"Automatic CFG - Advanced",
|
||||
"Automatic CFG - Attention modifiers",
|
||||
"Automatic CFG - Attention modifiers tester",
|
||||
"Automatic CFG - Custom attentions",
|
||||
"Automatic CFG - Excellent attention",
|
||||
"Automatic CFG - Negative",
|
||||
"Automatic CFG - Post rescale only",
|
||||
"Automatic CFG - Preset Loader",
|
||||
"Automatic CFG - Unpatch function",
|
||||
"Automatic CFG - Warp Drive",
|
||||
"SAG delayed activation"
|
||||
@ -1412,6 +1419,7 @@
|
||||
"TilePreprocessor",
|
||||
"UniFormer-SemSegPreprocessor",
|
||||
"Unimatch_OptFlowPreprocessor",
|
||||
"UpperBodyTrackingFromPoseKps",
|
||||
"Zoe-DepthMapPreprocessor",
|
||||
"Zoe_DepthAnythingPreprocessor"
|
||||
],
|
||||
@ -1646,12 +1654,24 @@
|
||||
"title_aux": "ReActor Node for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/GraftingRayman/ComfyUI_GraftingRayman": [
|
||||
[
|
||||
"GR Image Resize",
|
||||
"GR Mask Create",
|
||||
"GR Mask Resize",
|
||||
"GR Multi Mask Create",
|
||||
"GR Prompt Selector"
|
||||
],
|
||||
{
|
||||
"title_aux": "GR Prompt Selector"
|
||||
}
|
||||
],
|
||||
"https://github.com/Guillaume-Fgt/ComfyUI_StableCascadeLatentRatio": [
|
||||
[
|
||||
"StableCascadeLatentRatio"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-ScenarioPrompt"
|
||||
"title_aux": "ComfyUI_StableCascadeLatentRatio"
|
||||
}
|
||||
],
|
||||
"https://github.com/HAL41/ComfyUI-aichemy-nodes": [
|
||||
@ -2117,6 +2137,8 @@
|
||||
"ACN_SparseCtrlMergedLoaderAdvanced",
|
||||
"ACN_SparseCtrlRGBPreprocessor",
|
||||
"ACN_SparseCtrlSpreadMethodNode",
|
||||
"ACN_TimestepKeyframeFromStrengthList",
|
||||
"ACN_TimestepKeyframeInterpolation",
|
||||
"ControlNetLoaderAdvanced",
|
||||
"CustomControlNetWeights",
|
||||
"CustomT2IAdapterWeights",
|
||||
@ -2644,6 +2666,8 @@
|
||||
"DoubleClipTextEncode",
|
||||
"EmbeddingLoader",
|
||||
"FilmCharDir",
|
||||
"FuseImages",
|
||||
"FuseImages2",
|
||||
"HashText",
|
||||
"HueSatLum",
|
||||
"HueShift",
|
||||
@ -2654,6 +2678,7 @@
|
||||
"IntEvaluate",
|
||||
"IntFloatDict",
|
||||
"IntStringDict",
|
||||
"JsonSearch",
|
||||
"LandscapeBackgrounds",
|
||||
"LandscapeDir",
|
||||
"MakeupStylesDir",
|
||||
@ -2664,11 +2689,18 @@
|
||||
"PhotomontageB",
|
||||
"PhotomontageC",
|
||||
"PostSamplerCrop",
|
||||
"PresetLoad",
|
||||
"PresetRemove",
|
||||
"PresetSave",
|
||||
"RandomString",
|
||||
"SDXLEmptyLatent",
|
||||
"SavePrompt",
|
||||
"SaveWithMetaData",
|
||||
"SaveWithMetaData2",
|
||||
"SearchReplace",
|
||||
"SimplePrompts",
|
||||
"SpecificStylesDir",
|
||||
"StringJoin",
|
||||
"TimeStamp",
|
||||
"TricolorComposition",
|
||||
"WorkflowSettings",
|
||||
@ -3483,6 +3515,14 @@
|
||||
"title_aux": "ComfyUI-SVDResizer"
|
||||
}
|
||||
],
|
||||
"https://github.com/ShmuelRonen/ComfyUI_wav2lip": [
|
||||
[
|
||||
"Wav2Lip"
|
||||
],
|
||||
{
|
||||
"title_aux": "Wav2Lip Node for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/Shraknard/ComfyUI-Remover": [
|
||||
[
|
||||
"Remover"
|
||||
@ -3629,7 +3669,8 @@
|
||||
"Image Batch Manager (SuperBeasts.AI)",
|
||||
"Make Resized Mask Batch (SuperBeasts.AI)",
|
||||
"Mask Batch Manager (SuperBeasts.AI)",
|
||||
"Pixel Deflicker (SuperBeasts.AI)"
|
||||
"Pixel Deflicker (SuperBeasts.AI)",
|
||||
"String List Manager (SuperBeasts.AI)"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-SuperBeasts"
|
||||
@ -3948,6 +3989,7 @@
|
||||
"tri3d-atr-parse",
|
||||
"tri3d-atr-parse-batch",
|
||||
"tri3d-clipdrop-bgremove-api",
|
||||
"tri3d-clipdrop-bgreplace-api",
|
||||
"tri3d-composite-image-splitter",
|
||||
"tri3d-dwpose",
|
||||
"tri3d-extract-hand",
|
||||
@ -4493,6 +4535,7 @@
|
||||
"Text Dictionary To Text",
|
||||
"Text Dictionary Update",
|
||||
"Text File History Loader",
|
||||
"Text Find",
|
||||
"Text Find and Replace",
|
||||
"Text Find and Replace Input",
|
||||
"Text Find and Replace by Dictionary",
|
||||
@ -4900,6 +4943,7 @@
|
||||
],
|
||||
"https://github.com/abyz22/image_control": [
|
||||
[
|
||||
"abyz22_AddPrompt",
|
||||
"abyz22_Convertpipe",
|
||||
"abyz22_Editpipe",
|
||||
"abyz22_FirstNonNull",
|
||||
@ -4909,6 +4953,7 @@
|
||||
"abyz22_ImpactWildcardEncode_GetPrompt",
|
||||
"abyz22_Ksampler",
|
||||
"abyz22_Padding Image",
|
||||
"abyz22_RandomMask",
|
||||
"abyz22_RemoveControlnet",
|
||||
"abyz22_SaveImage",
|
||||
"abyz22_SetQueue",
|
||||
@ -4917,6 +4962,7 @@
|
||||
"abyz22_blend_onecolor",
|
||||
"abyz22_blendimages",
|
||||
"abyz22_bypass",
|
||||
"abyz22_censoring",
|
||||
"abyz22_drawmask",
|
||||
"abyz22_lamaInpaint",
|
||||
"abyz22_lamaPreprocessor",
|
||||
@ -5050,12 +5096,13 @@
|
||||
"title_aux": "ComfyUI Image Saver"
|
||||
}
|
||||
],
|
||||
"https://github.com/alisson-anjos/ComfyUI-LLaVA-Describer": [
|
||||
"https://github.com/alisson-anjos/ComfyUI-Ollama-Describer": [
|
||||
[
|
||||
"LLaVaDescriber"
|
||||
"LLaVaDescriber",
|
||||
"OllamaDescriber"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-LLaVA-Describer"
|
||||
"title_aux": "ComfyUI-Ollama-Describer"
|
||||
}
|
||||
],
|
||||
"https://github.com/alpertunga-bile/prompt-generator-comfyui": [
|
||||
@ -5348,6 +5395,18 @@
|
||||
"title_aux": "ComfyUI-ClipScore-Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/badayvedat/ComfyUI-fal-Connector": [
|
||||
[
|
||||
"BooleanInput_fal",
|
||||
"ComboInput_fal",
|
||||
"FloatInput_fal",
|
||||
"IntegerInput_fal",
|
||||
"StringInput_fal"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-fal-Connector"
|
||||
}
|
||||
],
|
||||
"https://github.com/badjeff/comfyui_lora_tag_loader": [
|
||||
[
|
||||
"LoraTagLoader"
|
||||
@ -5883,6 +5942,7 @@
|
||||
"ImageDirIterator",
|
||||
"Modelscopet2v",
|
||||
"Modelscopev2v",
|
||||
"TextFileLineIterator",
|
||||
"VidDirIterator"
|
||||
],
|
||||
{
|
||||
@ -6347,6 +6407,7 @@
|
||||
],
|
||||
"https://github.com/chflame163/ComfyUI_LayerStyle": [
|
||||
[
|
||||
"LayerColor: AutoAdjust",
|
||||
"LayerColor: AutoBrightness",
|
||||
"LayerColor: Brightness & Contrast",
|
||||
"LayerColor: Color of Shadow & Highlight",
|
||||
@ -6453,7 +6514,9 @@
|
||||
"LayerUtility: PromptEmbellish",
|
||||
"LayerUtility: PromptTagger",
|
||||
"LayerUtility: QWenImage2Prompt",
|
||||
"LayerUtility: RGB Value",
|
||||
"LayerUtility: RestoreCropBox",
|
||||
"LayerUtility: Seed",
|
||||
"LayerUtility: SimpleTextImage",
|
||||
"LayerUtility: TextBox",
|
||||
"LayerUtility: TextImage",
|
||||
@ -6461,10 +6524,10 @@
|
||||
"LayerUtility: XY to Percent"
|
||||
],
|
||||
{
|
||||
"author": "Chris Freilich",
|
||||
"description": "This extension provides a blend modes node with 30 blend modes.",
|
||||
"nickname": "Virtuoso Pack - Blend Nodes",
|
||||
"title": "Virtuoso Pack - Blend Modes",
|
||||
"author": "chflame",
|
||||
"description": "A set of nodes for ComfyUI that can composite layer and mask to achieve Photoshop like functionality.",
|
||||
"nickname": "LayerStyle",
|
||||
"title": "LayerStyle",
|
||||
"title_aux": "ComfyUI Layer Style"
|
||||
}
|
||||
],
|
||||
@ -6967,6 +7030,7 @@
|
||||
],
|
||||
"https://github.com/cubiq/ComfyUI_FaceAnalysis": [
|
||||
[
|
||||
"FaceAlign",
|
||||
"FaceAnalysisModels",
|
||||
"FaceBoundingBox",
|
||||
"FaceEmbedDistance"
|
||||
@ -7036,6 +7100,7 @@
|
||||
],
|
||||
"https://github.com/cubiq/ComfyUI_essentials": [
|
||||
[
|
||||
"ApplyCLIPSeg+",
|
||||
"BatchCount+",
|
||||
"CLIPTextEncodeSDXL+",
|
||||
"ConditioningCombineMultiple+",
|
||||
@ -7061,6 +7126,7 @@
|
||||
"ImageSeamCarving+",
|
||||
"KSamplerVariationsStochastic+",
|
||||
"KSamplerVariationsWithNoise+",
|
||||
"LoadCLIPSegModels+",
|
||||
"MaskBatch+",
|
||||
"MaskBlur+",
|
||||
"MaskBoundingBox+",
|
||||
@ -7089,6 +7155,7 @@
|
||||
"https://github.com/cubiq/PuLID_ComfyUI": [
|
||||
[
|
||||
"ApplyPulid",
|
||||
"ApplyPulidAdvanced",
|
||||
"PulidEvaClipLoader",
|
||||
"PulidInsightFaceLoader",
|
||||
"PulidModelLoader"
|
||||
@ -7728,13 +7795,17 @@
|
||||
"FL_CodeNode",
|
||||
"FL_DirectoryCrawl",
|
||||
"FL_Glitch",
|
||||
"FL_HalftonePattern",
|
||||
"FL_HexagonalPattern",
|
||||
"FL_ImageCaptionSaver",
|
||||
"FL_ImageDimensionDisplay",
|
||||
"FL_ImageDurationSync",
|
||||
"FL_ImagePixelator",
|
||||
"FL_ImageRandomizer",
|
||||
"FL_NFTGenerator",
|
||||
"FL_PixelSort",
|
||||
"FL_PromptSelector",
|
||||
"FL_RandomNumber",
|
||||
"FL_Ripple"
|
||||
],
|
||||
{
|
||||
@ -7864,6 +7935,16 @@
|
||||
"title_aux": "As_ComfyUI_CustomNodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/fmatray/ComfyUI_BattlemapGrid": [
|
||||
[
|
||||
"Battlemap Grid",
|
||||
"Map Generator",
|
||||
"Map Generator(Outdoors)"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_BattlemapGrid"
|
||||
}
|
||||
],
|
||||
"https://github.com/fofr/ComfyUI-HyperSDXL1StepUnetScheduler": [
|
||||
[
|
||||
"HyperSDXL1StepUnetScheduler"
|
||||
@ -7943,6 +8024,7 @@
|
||||
],
|
||||
"https://github.com/fsdymy1024/ComfyUI_fsdymy": [
|
||||
[
|
||||
"Preview Image Without Metadata",
|
||||
"Save Image Without Metadata"
|
||||
],
|
||||
{
|
||||
@ -8227,17 +8309,15 @@
|
||||
],
|
||||
"https://github.com/gonzalu/ComfyUI_YFG_Comical": [
|
||||
[
|
||||
"hello_world",
|
||||
"image_histogram_node",
|
||||
"image_histograms_node",
|
||||
"meme_generator_node"
|
||||
"image_histograms_node_compact"
|
||||
],
|
||||
{
|
||||
"author": "YFG",
|
||||
"description": "This extension just outputs Hello World! as a string.",
|
||||
"nickname": "YFG Hello World",
|
||||
"title": "YFG Hello World",
|
||||
"title_aux": "ComfyUI_YFG_Comical"
|
||||
"description": "This extension calculates the histogram of an image and outputs the results as graph images for individual channels as well as RGB and Luminosity.",
|
||||
"nickname": "\ud83d\udc31 YFG Histograms",
|
||||
"title": "YFG Histograms",
|
||||
"title_aux": "\ud83d\ude38 YFG Comical Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/guill/abracadabra-comfyui": [
|
||||
@ -8270,6 +8350,7 @@
|
||||
],
|
||||
"https://github.com/hay86/ComfyUI_AceNodes": [
|
||||
[
|
||||
"ACE_AnyInputSwitchBool",
|
||||
"ACE_AudioLoad",
|
||||
"ACE_AudioPlay",
|
||||
"ACE_AudioSave",
|
||||
@ -8328,7 +8409,8 @@
|
||||
"https://github.com/hay86/ComfyUI_OpenVoice": [
|
||||
[
|
||||
"D_OpenVoice_STS",
|
||||
"D_OpenVoice_TTS"
|
||||
"D_OpenVoice_TTS",
|
||||
"D_OpenVoice_TTS_V2"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI OpenVoice"
|
||||
@ -8336,6 +8418,7 @@
|
||||
],
|
||||
"https://github.com/heshengtao/comfyui_LLM_party": [
|
||||
[
|
||||
"About_us",
|
||||
"CLIPTextEncode_party",
|
||||
"KSampler_party",
|
||||
"LLM",
|
||||
@ -8431,6 +8514,18 @@
|
||||
"title_aux": "ComfyUI-ModelDownloader"
|
||||
}
|
||||
],
|
||||
"https://github.com/huagetai/ComfyUI-Gaffer": [
|
||||
[
|
||||
"ApplyICLight",
|
||||
"CalculateNormalMap",
|
||||
"GrayScaler",
|
||||
"ICLightModelLoader",
|
||||
"LightSource"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui's gaffer(ComfyUI native implementation of IC-Light. )"
|
||||
}
|
||||
],
|
||||
"https://github.com/huagetai/ComfyUI_LightGradient": [
|
||||
[
|
||||
"ImageGradient",
|
||||
@ -8440,6 +8535,16 @@
|
||||
"title_aux": "Light Gradient for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/huchenlei/ComfyUI-IC-Light-Native": [
|
||||
[
|
||||
"ICLightApplyMaskGrey",
|
||||
"ICLightAppply",
|
||||
"VAEEncodeArgMax"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-IC-Light-Native"
|
||||
}
|
||||
],
|
||||
"https://github.com/huchenlei/ComfyUI-layerdiffuse": [
|
||||
[
|
||||
"LayeredDiffusionApply",
|
||||
@ -8790,13 +8895,16 @@
|
||||
"FacelessLoadImageUrl",
|
||||
"FacelessLoadVideo",
|
||||
"FacelessLoadVideoUrl",
|
||||
"FacelessMergeVideos",
|
||||
"FacelessRemoveBackground",
|
||||
"FacelessSaveVideo",
|
||||
"FacelessUploadVideo",
|
||||
"FacelessVideoFaceRestore",
|
||||
"FacelessVideoFaceSwap"
|
||||
"FacelessVideoFaceSwap",
|
||||
"FacelessVideoRemoveBackground"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-fb-utils"
|
||||
"title_aux": "Faceless Node for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/jesenzhang/ComfyUI_StreamDiffusion": [
|
||||
@ -8884,6 +8992,17 @@
|
||||
"title_aux": "ComfyUI-InstantMesh"
|
||||
}
|
||||
],
|
||||
"https://github.com/jtydhr88/ComfyUI-LayerDivider": [
|
||||
[
|
||||
"LayerDivider - Color Base",
|
||||
"LayerDivider - Divide Layer",
|
||||
"LayerDivider - Load SAM Mask Generator",
|
||||
"LayerDivider - Segment Mask"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI LayerDivider"
|
||||
}
|
||||
],
|
||||
"https://github.com/ka-puna/comfyui-yanc": [
|
||||
[
|
||||
"YANC.ConcatStrings",
|
||||
@ -8897,6 +9016,14 @@
|
||||
"title_aux": "comfyui-yanc"
|
||||
}
|
||||
],
|
||||
"https://github.com/kaanyalova/ComfyUI_ExtendedImageFormats": [
|
||||
[
|
||||
"ExtendedSaveImage"
|
||||
],
|
||||
{
|
||||
"title_aux": "Extended Image Formats for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/kadirnar/ComfyUI-Transformers": [
|
||||
[
|
||||
"DepthEstimationPipeline",
|
||||
@ -9022,6 +9149,14 @@
|
||||
"title_aux": "ComfyUI-text-file-util"
|
||||
}
|
||||
],
|
||||
"https://github.com/katalist-ai/comfyUI-nsfw-detection": [
|
||||
[
|
||||
"NudenetDetector"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyUI-nsfw-detection"
|
||||
}
|
||||
],
|
||||
"https://github.com/kealiu/ComfyUI-S3-Tools": [
|
||||
[
|
||||
"Load Image From S3",
|
||||
@ -9176,10 +9311,12 @@
|
||||
],
|
||||
"https://github.com/kijai/ComfyUI-IC-Light": [
|
||||
[
|
||||
"BackgroundScaler",
|
||||
"CalculateNormalsFromImages",
|
||||
"ICLightConditioning",
|
||||
"LightSource",
|
||||
"LoadAndApplyICLightUnet"
|
||||
"LoadAndApplyICLightUnet",
|
||||
"LoadHDRImage"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-IC-Light"
|
||||
@ -9213,6 +9350,7 @@
|
||||
"CreateGradientMask",
|
||||
"CreateInstanceDiffusionTracking",
|
||||
"CreateMagicMask",
|
||||
"CreateShapeImageOnPath",
|
||||
"CreateShapeMask",
|
||||
"CreateShapeMaskOnPath",
|
||||
"CreateTextMask",
|
||||
@ -9220,6 +9358,7 @@
|
||||
"CreateVoronoiMask",
|
||||
"CrossFadeImages",
|
||||
"CustomSigmas",
|
||||
"DownloadAndLoadCLIPSeg",
|
||||
"DrawInstanceDiffusionTracking",
|
||||
"DummyLatentOut",
|
||||
"EmptyLatentImagePresets",
|
||||
@ -9238,6 +9377,7 @@
|
||||
"GradientToFloat",
|
||||
"GrowMaskWithBlur",
|
||||
"INTConstant",
|
||||
"ImageAddMulti",
|
||||
"ImageAndMaskPreview",
|
||||
"ImageBatchMulti",
|
||||
"ImageBatchRepeatInterleaving",
|
||||
@ -9248,7 +9388,9 @@
|
||||
"ImageGridComposite3x3",
|
||||
"ImageNormalize_Neg1_To_1",
|
||||
"ImagePadForOutpaintMasked",
|
||||
"ImagePadForOutpaintTargetSize",
|
||||
"ImagePass",
|
||||
"ImageResizeKJ",
|
||||
"ImageTransformByNormalizedAmplitude",
|
||||
"ImageUpscaleWithModelBatched",
|
||||
"InjectNoiseToLatent",
|
||||
@ -9258,7 +9400,7 @@
|
||||
"Intrinsic_lora_sampling",
|
||||
"JoinStringMulti",
|
||||
"JoinStrings",
|
||||
"LoadICLightUnet",
|
||||
"LoadAndResizeImage",
|
||||
"LoadResAdapterNormalization",
|
||||
"MaskBatchMulti",
|
||||
"MaskOrImageToWeight",
|
||||
@ -9542,6 +9684,19 @@
|
||||
"title_aux": "cd-tuner_negpip-ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/laksjdjf/cgem156-ComfyUI": [
|
||||
[
|
||||
"GradualLatentSampler",
|
||||
"LCMSamplerRCFG",
|
||||
"LoadAestheticShadow",
|
||||
"PredictAesthetic",
|
||||
"TCDSampler",
|
||||
"TextScheduler"
|
||||
],
|
||||
{
|
||||
"title_aux": "cgem156-ComfyUI\ud83c\udf4c"
|
||||
}
|
||||
],
|
||||
"https://github.com/laksjdjf/pfg-ComfyUI": [
|
||||
[
|
||||
"PFG"
|
||||
@ -9592,6 +9747,14 @@
|
||||
"title_aux": "ComfyUI-Debug"
|
||||
}
|
||||
],
|
||||
"https://github.com/liusida/ComfyUI-Login": [
|
||||
[
|
||||
"LoadImageIncognito"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Login"
|
||||
}
|
||||
],
|
||||
"https://github.com/ljleb/comfy-mecha": [
|
||||
[
|
||||
"Blocks Mecha Hyper",
|
||||
@ -9756,6 +9919,15 @@
|
||||
"title_aux": "Wildcards"
|
||||
}
|
||||
],
|
||||
"https://github.com/lquesada/ComfyUI-Inpaint-CropAndStitch": [
|
||||
[
|
||||
"InpaintCrop",
|
||||
"InpaintStitch"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Inpaint-CropAndStitch"
|
||||
}
|
||||
],
|
||||
"https://github.com/lquesada/ComfyUI-Prompt-Combinator": [
|
||||
[
|
||||
"PromptCombinator",
|
||||
@ -10027,6 +10199,7 @@
|
||||
"PromptBuilder //Inspire",
|
||||
"PromptExtractor //Inspire",
|
||||
"RandomGeneratorForList //Inspire",
|
||||
"RandomNoise //Inspire",
|
||||
"RegionalConditioningColorMask //Inspire",
|
||||
"RegionalConditioningSimple //Inspire",
|
||||
"RegionalIPAdapterColorMask //Inspire",
|
||||
@ -10268,16 +10441,21 @@
|
||||
"PettyPaintComponent",
|
||||
"PettyPaintConditioningSetMaskAndCombine",
|
||||
"PettyPaintConvert",
|
||||
"PettyPaintCountFiles",
|
||||
"PettyPaintEnsureDirectory",
|
||||
"PettyPaintExec",
|
||||
"PettyPaintImageCompositeMasked",
|
||||
"PettyPaintImagePlacement",
|
||||
"PettyPaintImageSave",
|
||||
"PettyPaintImageStore",
|
||||
"PettyPaintImageToMask",
|
||||
"PettyPaintJsonMap",
|
||||
"PettyPaintJsonRead",
|
||||
"PettyPaintJsonReadArray",
|
||||
"PettyPaintLoadImage",
|
||||
"PettyPaintLoadImages",
|
||||
"PettyPaintMap",
|
||||
"PettyPaintProcessor",
|
||||
"PettyPaintRemoveAddText",
|
||||
"PettyPaintSDTurboScheduler",
|
||||
"PettyPaintText",
|
||||
@ -10480,11 +10658,14 @@
|
||||
[
|
||||
"DanbooruTagsTransformerBanTagsFromRegex",
|
||||
"DanbooruTagsTransformerComposePrompt",
|
||||
"DanbooruTagsTransformerComposePromptV2",
|
||||
"DanbooruTagsTransformerDecode",
|
||||
"DanbooruTagsTransformerDecodeBySplitedParts",
|
||||
"DanbooruTagsTransformerGenerate",
|
||||
"DanbooruTagsTransformerGenerateAdvanced",
|
||||
"DanbooruTagsTransformerGenerationConfig",
|
||||
"DanbooruTagsTransformerGetAspectRatio",
|
||||
"DanbooruTagsTransformerLoader",
|
||||
"DanbooruTagsTransformerRearrangedByAnimagine",
|
||||
"DanbooruTagsTransformerRemoveTagToken"
|
||||
],
|
||||
@ -10608,8 +10789,10 @@
|
||||
"BlendInpaint",
|
||||
"BrushNet",
|
||||
"BrushNetLoader",
|
||||
"CutForInpaint",
|
||||
"PowerPaint",
|
||||
"PowerPaintCLIPLoader"
|
||||
"PowerPaintCLIPLoader",
|
||||
"RAUNet"
|
||||
],
|
||||
{
|
||||
"author": "nullquant",
|
||||
@ -10729,6 +10912,18 @@
|
||||
"title_aux": "ComfyUI-TrollSuite"
|
||||
}
|
||||
],
|
||||
"https://github.com/oztrkoguz/ComfyUI_StoryCreator": [
|
||||
[
|
||||
"Kosmos2SamplerSimple2",
|
||||
"KosmosLoader2",
|
||||
"StoryLoader",
|
||||
"StorySamplerSimple",
|
||||
"Write2"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI StoryCreater"
|
||||
}
|
||||
],
|
||||
"https://github.com/palant/extended-saveimage-comfyui": [
|
||||
[
|
||||
"SaveImageExtended"
|
||||
@ -10933,7 +11128,7 @@
|
||||
],
|
||||
{
|
||||
"author": "receyuki",
|
||||
"description": "ComfyUI node version of the SD Prompt Reader",
|
||||
"description": "The ultimate solution for managing image metadata and multi-tool compatibility. ComfyUI node version of the SD Prompt Reader",
|
||||
"nickname": "SD Prompt Reader",
|
||||
"title": "SD Prompt Reader",
|
||||
"title_aux": "SD Prompt Reader"
|
||||
@ -10943,12 +11138,18 @@
|
||||
[
|
||||
"AvoidErasePrediction",
|
||||
"CFGPrediction",
|
||||
"CharacteristicGuidancePrediction",
|
||||
"CombinePredictions",
|
||||
"ConditionedPrediction",
|
||||
"EarlyMiddleLatePrediction",
|
||||
"InterpolatePredictions",
|
||||
"LogSigmas",
|
||||
"PerpNegPrediction",
|
||||
"SamplerCustomPrediction",
|
||||
"ScalePrediction",
|
||||
"ScaledGuidancePrediction",
|
||||
"SelectSigmas",
|
||||
"SplitAtSigma",
|
||||
"SwitchPredictions"
|
||||
],
|
||||
{
|
||||
@ -11039,6 +11240,15 @@
|
||||
"title_aux": "ComfyUI-Tara-LLM-Integration"
|
||||
}
|
||||
],
|
||||
"https://github.com/royceschultz/ComfyUI-Notifications": [
|
||||
[
|
||||
"Notif-PlaySound",
|
||||
"Notif-SystemNotification"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Notifications"
|
||||
}
|
||||
],
|
||||
"https://github.com/royceschultz/ComfyUI-TranscriptionTools": [
|
||||
[
|
||||
"TT-AudioSink",
|
||||
@ -11063,6 +11273,37 @@
|
||||
"title_aux": "RUI-Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/ruiqutech/ComfyUI-RuiquNodes": [
|
||||
[
|
||||
"EvaluateListMultiple1",
|
||||
"EvaluateListMultiple3",
|
||||
"EvaluateListMultiple6",
|
||||
"EvaluateListMultiple9",
|
||||
"EvaluateMultiple1",
|
||||
"EvaluateMultiple3",
|
||||
"EvaluateMultiple6",
|
||||
"EvaluateMultiple9",
|
||||
"ImageDilate",
|
||||
"ImageErode",
|
||||
"ListPath",
|
||||
"MaskDilate",
|
||||
"MaskErode",
|
||||
"PreviewMask",
|
||||
"RangeSplit",
|
||||
"SaveMask",
|
||||
"StringAsAny",
|
||||
"StringConcat1",
|
||||
"StringConcat3",
|
||||
"StringConcat6",
|
||||
"StringConcat9",
|
||||
"StringPathStem",
|
||||
"TermsToList",
|
||||
"VAEDecodeSave"
|
||||
],
|
||||
{
|
||||
"title_aux": "RuiquNodes for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/runtime44/comfyui_r44_nodes": [
|
||||
[
|
||||
"Runtime44ColorMatch",
|
||||
@ -11091,7 +11332,8 @@
|
||||
"https://github.com/saftle/suplex_comfy_nodes": [
|
||||
[
|
||||
"ControlNet Selector",
|
||||
"ControlNetOptionalLoader"
|
||||
"ControlNetOptionalLoader",
|
||||
"DiffusersSelector"
|
||||
],
|
||||
{
|
||||
"title_aux": "Suplex Misc ComfyUI Nodes"
|
||||
@ -11167,6 +11409,7 @@
|
||||
"ChatGPTOpenAI",
|
||||
"CkptNames_",
|
||||
"Color",
|
||||
"ComparingTwoFrames_",
|
||||
"CompositeImages_",
|
||||
"DynamicDelayProcessor",
|
||||
"EmbeddingPrompt",
|
||||
@ -11469,6 +11712,15 @@
|
||||
"title_aux": "ComfyUI_ChatGLM_API"
|
||||
}
|
||||
],
|
||||
"https://github.com/smthemex/ComfyUI_HiDiffusion_Pro": [
|
||||
[
|
||||
"Hidiffusion_Controlnet_Image",
|
||||
"Hidiffusion_Text2Image"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_HiDiffusion_Pro"
|
||||
}
|
||||
],
|
||||
"https://github.com/smthemex/ComfyUI_Llama3_8B": [
|
||||
[
|
||||
"ChatQA_1p5_8B",
|
||||
@ -11731,7 +11983,8 @@
|
||||
"https://github.com/sugarkwork/comfyui_tag_fillter": [
|
||||
[
|
||||
"TagFilter",
|
||||
"TagRemover"
|
||||
"TagRemover",
|
||||
"TagReplace"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui_tag_filter"
|
||||
@ -11850,6 +12103,26 @@
|
||||
"title_aux": "ComfyUI Browser"
|
||||
}
|
||||
],
|
||||
"https://github.com/teward/ComfyUI-Helper-Nodes": [
|
||||
[
|
||||
"HelperNodes_CfgScale",
|
||||
"HelperNodes_CheckpointSelector",
|
||||
"HelperNodes_MultilineStringLiteral",
|
||||
"HelperNodes_Prompt",
|
||||
"HelperNodes_SDXLCommonResolutions",
|
||||
"HelperNodes_SamplerSelector",
|
||||
"HelperNodes_SaveImage",
|
||||
"HelperNodes_SchedulerSelector",
|
||||
"HelperNodes_SeedSelector",
|
||||
"HelperNodes_Steps",
|
||||
"HelperNodes_StringLiteral",
|
||||
"HelperNodes_VAESelector",
|
||||
"HelperNodes_WidthHeight"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Helper-Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/theUpsider/ComfyUI-Logic": [
|
||||
[
|
||||
"Bool",
|
||||
@ -12800,8 +13073,10 @@
|
||||
"ImageConcanateOfUtils",
|
||||
"IntAndIntAddOffsetLiteral",
|
||||
"IntMultipleAddLiteral",
|
||||
"LoadImageMaskWithSwitch",
|
||||
"LoadImageWithSwitch",
|
||||
"ModifyTextGender"
|
||||
"ModifyTextGender",
|
||||
"SplitMask"
|
||||
],
|
||||
{
|
||||
"title_aux": "zhangp365/Some Utils for ComfyUI"
|
||||
@ -12853,6 +13128,8 @@
|
||||
"https://github.com/zombieyang/sd-ppp": [
|
||||
[
|
||||
"Get Image From Photoshop Layer",
|
||||
"Image Times Opacity",
|
||||
"Mask Times Opacity",
|
||||
"Send Images To Photoshop"
|
||||
],
|
||||
{
|
||||
|
||||
@ -336,7 +336,7 @@ def restore_pip_snapshot(pips, options):
|
||||
non_local_url = []
|
||||
for k, v in pips.items():
|
||||
if v == "":
|
||||
non_url.append(v)
|
||||
non_url.append(k)
|
||||
else:
|
||||
if v.startswith('file:'):
|
||||
local_url.append(v)
|
||||
|
||||
2742
github-stats.json
2742
github-stats.json
File diff suppressed because it is too large
Load Diff
@ -23,7 +23,7 @@ sys.path.append(glob_path)
|
||||
import cm_global
|
||||
from manager_util import *
|
||||
|
||||
version = [2, 30]
|
||||
version = [2, 34]
|
||||
version_str = f"V{version[0]}.{version[1]}" + (f'.{version[2]}' if len(version) > 2 else '')
|
||||
|
||||
comfyui_manager_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
|
||||
@ -204,7 +204,8 @@ def write_config():
|
||||
'double_click_policy': get_config()['double_click_policy'],
|
||||
'windows_selector_event_loop_policy': get_config()['windows_selector_event_loop_policy'],
|
||||
'model_download_by_agent': get_config()['model_download_by_agent'],
|
||||
'downgrade_blacklist': get_config()['downgrade_blacklist']
|
||||
'downgrade_blacklist': get_config()['downgrade_blacklist'],
|
||||
'security_level': get_config()['security_level'],
|
||||
}
|
||||
with open(config_path, 'w') as configfile:
|
||||
config.write(configfile)
|
||||
@ -216,20 +217,30 @@ def read_config():
|
||||
config.read(config_path)
|
||||
default_conf = config['default']
|
||||
|
||||
# policy migration: disable_unsecure_features -> security_level
|
||||
if 'disable_unsecure_features' in default_conf:
|
||||
if default_conf['disable_unsecure_features'].lower() == 'true':
|
||||
security_level = 'strong'
|
||||
else:
|
||||
security_level = 'normal'
|
||||
else:
|
||||
security_level = default_conf['security_level'] if 'security_level' in default_conf else 'normal'
|
||||
|
||||
return {
|
||||
'preview_method': default_conf['preview_method'] if 'preview_method' in default_conf else manager_funcs.get_current_preview_method(),
|
||||
'badge_mode': default_conf['badge_mode'] if 'badge_mode' in default_conf else 'none',
|
||||
'git_exe': default_conf['git_exe'] if 'git_exe' in default_conf else '',
|
||||
'channel_url': default_conf['channel_url'] if 'channel_url' in default_conf else 'https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main',
|
||||
'share_option': default_conf['share_option'] if 'share_option' in default_conf else 'all',
|
||||
'bypass_ssl': default_conf['bypass_ssl'] if 'bypass_ssl' in default_conf else False,
|
||||
'file_logging': default_conf['file_logging'] if 'file_logging' in default_conf else True,
|
||||
'bypass_ssl': default_conf['bypass_ssl'].lower() == 'true' if 'bypass_ssl' in default_conf else False,
|
||||
'file_logging': default_conf['file_logging'].lower() == 'true' if 'file_logging' in default_conf else True,
|
||||
'default_ui': default_conf['default_ui'] if 'default_ui' in default_conf else 'none',
|
||||
'component_policy': default_conf['component_policy'] if 'component_policy' in default_conf else 'workflow',
|
||||
'double_click_policy': default_conf['double_click_policy'] if 'double_click_policy' in default_conf else 'copy-all',
|
||||
'windows_selector_event_loop_policy': default_conf['windows_selector_event_loop_policy'] if 'windows_selector_event_loop_policy' in default_conf else False,
|
||||
'model_download_by_agent': default_conf['model_download_by_agent'] if 'model_download_by_agent' in default_conf else False,
|
||||
'windows_selector_event_loop_policy': default_conf['windows_selector_event_loop_policy'].lower() == 'true' if 'windows_selector_event_loop_policy' in default_conf else False,
|
||||
'model_download_by_agent': default_conf['model_download_by_agent'].lower() == 'true' if 'model_download_by_agent' in default_conf else False,
|
||||
'downgrade_blacklist': default_conf['downgrade_blacklist'] if 'downgrade_blacklist' in default_conf else '',
|
||||
'security_level': security_level
|
||||
}
|
||||
|
||||
except Exception:
|
||||
@ -246,7 +257,8 @@ def read_config():
|
||||
'double_click_policy': 'copy-all',
|
||||
'windows_selector_event_loop_policy': False,
|
||||
'model_download_by_agent': False,
|
||||
'downgrade_blacklist': ''
|
||||
'downgrade_blacklist': '',
|
||||
'security_level': 'normal',
|
||||
}
|
||||
|
||||
|
||||
@ -564,7 +576,7 @@ def git_pull(path):
|
||||
|
||||
async def get_data(uri, silent=False):
|
||||
if not silent:
|
||||
print(f"FETCH DATA from: {uri}")
|
||||
print(f"FETCH DATA from: {uri}", end="")
|
||||
|
||||
if uri.startswith("http"):
|
||||
async with aiohttp.ClientSession(trust_env=True, connector=aiohttp.TCPConnector(verify_ssl=False)) as session:
|
||||
@ -576,6 +588,8 @@ async def get_data(uri, silent=False):
|
||||
json_text = f.read()
|
||||
|
||||
json_obj = json.loads(json_text)
|
||||
if not silent:
|
||||
print(f" [DONE]")
|
||||
return json_obj
|
||||
|
||||
|
||||
@ -964,7 +978,6 @@ def get_current_snapshot():
|
||||
# Get ComfyUI hash
|
||||
repo_path = comfy_path
|
||||
|
||||
print(f"comfy_path: {comfy_path}")
|
||||
if not os.path.exists(os.path.join(repo_path, '.git')):
|
||||
print(f"ComfyUI update fail: The installed ComfyUI does not have a Git repository.")
|
||||
return {}
|
||||
@ -1184,3 +1197,4 @@ def unzip(model_path):
|
||||
|
||||
os.remove(model_path)
|
||||
return True
|
||||
|
||||
|
||||
@ -42,6 +42,36 @@ from comfy.cli_args import args
|
||||
import latent_preview
|
||||
|
||||
|
||||
is_local_mode = args.listen.startswith('127.')
|
||||
|
||||
|
||||
def is_allowed_security_level(level):
|
||||
if level == 'high':
|
||||
if is_local_mode:
|
||||
return core.get_config()['security_level'].lower() in ['weak', 'normal']
|
||||
else:
|
||||
return core.get_config()['security_level'].lower() == 'weak'
|
||||
elif level == 'middle':
|
||||
return core.get_config()['security_level'].lower() in ['weak', 'normal']
|
||||
else:
|
||||
return True
|
||||
|
||||
|
||||
async def get_risky_level(files):
|
||||
json_data1 = await core.get_data_by_mode('local', 'custom-node-list.json')
|
||||
json_data2 = await core.get_data_by_mode('cache', 'custom-node-list.json', channel_url='https://github.com/ltdrdata/ComfyUI-Manager/raw/main/custom-node-list.json')
|
||||
|
||||
all_urls = set()
|
||||
for x in json_data1['custom_nodes'] + json_data2['custom_nodes']:
|
||||
all_urls.update(x['files'])
|
||||
|
||||
for x in files:
|
||||
if x not in all_urls:
|
||||
return "high"
|
||||
|
||||
return "middle"
|
||||
|
||||
|
||||
class ManagerFuncsInComfyUI(core.ManagerFuncs):
|
||||
def get_current_preview_method(self):
|
||||
if args.preview_method == latent_preview.LatentPreviewMethod.Auto:
|
||||
@ -358,6 +388,10 @@ async def fetch_updates(request):
|
||||
|
||||
@PromptServer.instance.routes.get("/customnode/update_all")
|
||||
async def update_all(request):
|
||||
if not is_allowed_security_level('middle'):
|
||||
print(f"ERROR: To use this action, a security_level of `middle or below` is required. Please contact the administrator.")
|
||||
return web.Response(status=403)
|
||||
|
||||
try:
|
||||
core.save_snapshot_with_postfix('autosave')
|
||||
|
||||
@ -551,6 +585,10 @@ async def get_snapshot_list(request):
|
||||
|
||||
@PromptServer.instance.routes.get("/snapshot/remove")
|
||||
async def remove_snapshot(request):
|
||||
if not is_allowed_security_level('middle'):
|
||||
print(f"ERROR: To use this action, a security_level of `middle or below` is required. Please contact the administrator.")
|
||||
return web.Response(status=403)
|
||||
|
||||
try:
|
||||
target = request.rel_url.query["target"]
|
||||
|
||||
@ -565,6 +603,10 @@ async def remove_snapshot(request):
|
||||
|
||||
@PromptServer.instance.routes.get("/snapshot/restore")
|
||||
async def remove_snapshot(request):
|
||||
if not is_allowed_security_level('middle'):
|
||||
print(f"ERROR: To use this action, a security_level of `middle or below` is required. Please contact the administrator.")
|
||||
return web.Response(status=403)
|
||||
|
||||
try:
|
||||
target = request.rel_url.query["target"]
|
||||
|
||||
@ -729,8 +771,17 @@ def copy_set_active(files, is_disable, js_path_name='.'):
|
||||
|
||||
@PromptServer.instance.routes.post("/customnode/install")
|
||||
async def install_custom_node(request):
|
||||
if not is_allowed_security_level('middle'):
|
||||
print(f"ERROR: To use this action, a security_level of `middle or below` is required. Please contact the administrator.")
|
||||
return web.Response(status=403)
|
||||
|
||||
json_data = await request.json()
|
||||
|
||||
risky_level = await get_risky_level(json_data['files'])
|
||||
if not is_allowed_security_level(risky_level):
|
||||
print(f"ERROR: This installation is not allowed in this security_level. Please contact the administrator.")
|
||||
return web.Response(status=404)
|
||||
|
||||
install_type = json_data['install_type']
|
||||
|
||||
print(f"Install custom node '{json_data['title']}'")
|
||||
@ -767,6 +818,10 @@ async def install_custom_node(request):
|
||||
|
||||
@PromptServer.instance.routes.post("/customnode/fix")
|
||||
async def fix_custom_node(request):
|
||||
if not is_allowed_security_level('middle'):
|
||||
print(f"ERROR: To use this action, a security_level of `middle or below` is required. Please contact the administrator.")
|
||||
return web.Response(status=403)
|
||||
|
||||
json_data = await request.json()
|
||||
|
||||
install_type = json_data['install_type']
|
||||
@ -797,6 +852,10 @@ async def fix_custom_node(request):
|
||||
|
||||
@PromptServer.instance.routes.post("/customnode/install/git_url")
|
||||
async def install_custom_node_git_url(request):
|
||||
if not is_allowed_security_level('high'):
|
||||
print(f"ERROR: To use this feature, you must set '--listen' to a local IP and set the security level to 'middle' or 'weak'. Please contact the administrator.")
|
||||
return web.Response(status=403)
|
||||
|
||||
url = await request.text()
|
||||
res = core.gitclone_install([url])
|
||||
|
||||
@ -809,6 +868,10 @@ async def install_custom_node_git_url(request):
|
||||
|
||||
@PromptServer.instance.routes.post("/customnode/install/pip")
|
||||
async def install_custom_node_git_url(request):
|
||||
if not is_allowed_security_level('high'):
|
||||
print(f"ERROR: To use this feature, you must set '--listen' to a local IP and set the security level to 'middle' or 'weak'. Please contact the administrator.")
|
||||
return web.Response(status=403)
|
||||
|
||||
packages = await request.text()
|
||||
core.pip_install(packages.split(' '))
|
||||
|
||||
@ -817,6 +880,10 @@ async def install_custom_node_git_url(request):
|
||||
|
||||
@PromptServer.instance.routes.post("/customnode/uninstall")
|
||||
async def uninstall_custom_node(request):
|
||||
if not is_allowed_security_level('middle'):
|
||||
print(f"ERROR: To use this action, a security_level of `middle or below` is required. Please contact the administrator.")
|
||||
return web.Response(status=403)
|
||||
|
||||
json_data = await request.json()
|
||||
|
||||
install_type = json_data['install_type']
|
||||
@ -841,6 +908,10 @@ async def uninstall_custom_node(request):
|
||||
|
||||
@PromptServer.instance.routes.post("/customnode/update")
|
||||
async def update_custom_node(request):
|
||||
if not is_allowed_security_level('middle'):
|
||||
print(f"ERROR: To use this action, a security_level of `middle or below` is required. Please contact the administrator.")
|
||||
return web.Response(status=403)
|
||||
|
||||
json_data = await request.json()
|
||||
|
||||
install_type = json_data['install_type']
|
||||
@ -955,6 +1026,10 @@ manager_terminal_hook = ManagerTerminalHook()
|
||||
|
||||
@PromptServer.instance.routes.get("/manager/terminal")
|
||||
async def terminal_mode(request):
|
||||
if not is_allowed_security_level('high'):
|
||||
print(f"ERROR: To use this action, a security_level of `weak` is required. Please contact the administrator.")
|
||||
return web.Response(status=403)
|
||||
|
||||
if "mode" in request.rel_url.query:
|
||||
if request.rel_url.query['mode'] == 'true':
|
||||
sys.__comfyui_manager_terminal_hook.add_hook('cm', manager_terminal_hook)
|
||||
@ -1078,6 +1153,10 @@ async def get_notice(request):
|
||||
|
||||
@PromptServer.instance.routes.get("/manager/reboot")
|
||||
def restart(self):
|
||||
if not is_allowed_security_level('middle'):
|
||||
print(f"ERROR: To use this action, a security_level of `middle or below` is required. Please contact the administrator.")
|
||||
return web.Response(status=403)
|
||||
|
||||
try:
|
||||
sys.stdout.close_log()
|
||||
except Exception as e:
|
||||
|
||||
@ -56,7 +56,7 @@ export class AlternativesInstaller extends ComfyDialog {
|
||||
let data2 = data1.custom_node;
|
||||
|
||||
if(!data2)
|
||||
continue;
|
||||
continue;
|
||||
|
||||
let content = data1.tags.toLowerCase() + data1.description.toLowerCase() + data2.author.toLowerCase() + data2.description.toLowerCase() + data2.title.toLowerCase();
|
||||
|
||||
|
||||
11
js/cm-api.js
11
js/cm-api.js
@ -41,9 +41,18 @@ async function tryInstallCustomNode(event) {
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(event.detail.target)
|
||||
});
|
||||
|
||||
if(response.status == 403) {
|
||||
show_message('This action is not allowed with this security level configuration.');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
api.fetchApi("/manager/reboot");
|
||||
let response = await api.fetchApi("/manager/reboot");
|
||||
if(response.status == 403) {
|
||||
show_message('This action is not allowed with this security level configuration.');
|
||||
return false;
|
||||
}
|
||||
|
||||
await sleep(300);
|
||||
|
||||
|
||||
@ -15,7 +15,7 @@ import { CustomNodesInstaller } from "./custom-nodes-downloader.js";
|
||||
import { AlternativesInstaller } from "./a1111-alter-downloader.js";
|
||||
import { SnapshotManager } from "./snapshot.js";
|
||||
import { ModelInstaller } from "./model-downloader.js";
|
||||
import { manager_instance, setManagerInstance, install_via_git_url, install_pip, rebootAPI, free_models } from "./common.js";
|
||||
import { manager_instance, setManagerInstance, install_via_git_url, install_pip, rebootAPI, free_models, show_message } from "./common.js";
|
||||
import { ComponentBuilderDialog, load_components, set_component_policy, getPureName } from "./components-manager.js";
|
||||
import { set_double_click_policy } from "./node_fixer.js";
|
||||
|
||||
@ -520,25 +520,21 @@ async function updateComfyUI() {
|
||||
const response = await api.fetchApi('/comfyui_manager/update_comfyui');
|
||||
|
||||
if (response.status == 400) {
|
||||
app.ui.dialog.show('Failed to update ComfyUI.');
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
show_message('Failed to update ComfyUI.');
|
||||
return false;
|
||||
}
|
||||
|
||||
if (response.status == 201) {
|
||||
app.ui.dialog.show('ComfyUI has been successfully updated.');
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
show_message('ComfyUI has been successfully updated.');
|
||||
}
|
||||
else {
|
||||
app.ui.dialog.show('ComfyUI is already up to date with the latest version.');
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
show_message('ComfyUI is already up to date with the latest version.');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (exception) {
|
||||
app.ui.dialog.show(`Failed to update ComfyUI / ${exception}`);
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
show_message(`Failed to update ComfyUI / ${exception}`);
|
||||
return false;
|
||||
}
|
||||
finally {
|
||||
@ -560,13 +556,12 @@ async function fetchUpdates(update_check_checkbox) {
|
||||
const response = await api.fetchApi(`/customnode/fetch_updates?mode=${mode}`);
|
||||
|
||||
if (response.status != 200 && response.status != 201) {
|
||||
app.ui.dialog.show('Failed to fetch updates.');
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
show_message('Failed to fetch updates.');
|
||||
return false;
|
||||
}
|
||||
|
||||
if (response.status == 201) {
|
||||
app.ui.dialog.show("There is an updated extension available.<BR><BR><P><B>NOTE:<BR>Fetch Updates is not an update.<BR>Please update from <button id='cm-install-customnodes-button'>Install Custom Nodes</button> </B></P>");
|
||||
show_message("There is an updated extension available.<BR><BR><P><B>NOTE:<BR>Fetch Updates is not an update.<BR>Please update from <button id='cm-install-customnodes-button'>Install Custom Nodes</button> </B></P>");
|
||||
|
||||
const button = document.getElementById('cm-install-customnodes-button');
|
||||
button.addEventListener("click",
|
||||
@ -580,19 +575,16 @@ async function fetchUpdates(update_check_checkbox) {
|
||||
}
|
||||
);
|
||||
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
update_check_checkbox.checked = false;
|
||||
}
|
||||
else {
|
||||
app.ui.dialog.show('All extensions are already up-to-date with the latest versions.');
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
show_message('All extensions are already up-to-date with the latest versions.');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (exception) {
|
||||
app.ui.dialog.show(`Failed to update custom nodes / ${exception}`);
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
show_message(`Failed to update custom nodes / ${exception}`);
|
||||
return false;
|
||||
}
|
||||
finally {
|
||||
@ -615,11 +607,16 @@ async function updateAll(update_check_checkbox, manager_dialog) {
|
||||
const response1 = await api.fetchApi('/comfyui_manager/update_comfyui');
|
||||
const response2 = await api.fetchApi(`/customnode/update_all?mode=${mode}`);
|
||||
|
||||
if (response1.status == 400 || response2.status == 400) {
|
||||
app.ui.dialog.show('Failed to update ComfyUI or several extensions.<BR><BR>See terminal log.<BR>');
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
if (response2.status == 403) {
|
||||
show_message('This action is not allowed with this security level configuration.');
|
||||
return false;
|
||||
}
|
||||
|
||||
if (response1.status == 400 || response2.status == 400) {
|
||||
show_message('Failed to update ComfyUI or several extensions.<BR><BR>See terminal log.<BR>');
|
||||
return false;
|
||||
}
|
||||
|
||||
if(response1.status == 201 || response2.status == 201) {
|
||||
const update_info = await response2.json();
|
||||
|
||||
@ -633,7 +630,7 @@ async function updateAll(update_check_checkbox, manager_dialog) {
|
||||
updated_list = "<BR>UPDATED: "+update_info.updated.join(", ");
|
||||
}
|
||||
|
||||
app.ui.dialog.show(
|
||||
show_message(
|
||||
"ComfyUI and all extensions have been updated to the latest version.<BR>To apply the updated custom node, please <button class='cm-small-button' id='cm-reboot-button5'>RESTART</button> ComfyUI. And refresh browser.<BR>"
|
||||
+failed_list
|
||||
+updated_list
|
||||
@ -646,19 +643,15 @@ async function updateAll(update_check_checkbox, manager_dialog) {
|
||||
manager_dialog.close();
|
||||
}
|
||||
});
|
||||
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
}
|
||||
else {
|
||||
app.ui.dialog.show('ComfyUI and all extensions are already up-to-date with the latest versions.');
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
show_message('ComfyUI and all extensions are already up-to-date with the latest versions.');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (exception) {
|
||||
app.ui.dialog.show(`Failed to update ComfyUI or several extensions / ${exception}`);
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
show_message(`Failed to update ComfyUI or several extensions / ${exception}`);
|
||||
return false;
|
||||
}
|
||||
finally {
|
||||
|
||||
59
js/common.js
59
js/common.js
@ -1,6 +1,11 @@
|
||||
import { app } from "../../scripts/app.js";
|
||||
import { api } from "../../scripts/api.js";
|
||||
|
||||
export function show_message(msg) {
|
||||
app.ui.dialog.show(msg);
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
}
|
||||
|
||||
export async function sleep(ms) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
@ -47,6 +52,20 @@ export async function install_checked_custom_node(grid_rows, target_i, caller, m
|
||||
body: JSON.stringify(target)
|
||||
});
|
||||
|
||||
if(response.status == 403) {
|
||||
show_message('This action is not allowed with this security level configuration.');
|
||||
caller.updateMessage('');
|
||||
await caller.invalidateControl();
|
||||
return;
|
||||
}
|
||||
|
||||
if(response.status == 404) {
|
||||
show_message('With the current security level configuration, only custom nodes from the <B>"default channel"</B> can be installed.');
|
||||
caller.updateMessage('');
|
||||
await caller.invalidateControl();
|
||||
return;
|
||||
}
|
||||
|
||||
if(response.status == 400) {
|
||||
show_message(`${mode} failed: ${target.title}`);
|
||||
continue;
|
||||
@ -94,19 +113,21 @@ export async function install_pip(packages) {
|
||||
body: packages,
|
||||
});
|
||||
|
||||
if(res.status == 403) {
|
||||
show_message('This action is not allowed with this security level configuration.');
|
||||
return;
|
||||
}
|
||||
|
||||
if(res.status == 200) {
|
||||
app.ui.dialog.show(`PIP package installation is processed.<br>To apply the pip packages, please click the <button id='cm-reboot-button3'><font size='3px'>RESTART</font></button> button in ComfyUI.`);
|
||||
show_message(`PIP package installation is processed.<br>To apply the pip packages, please click the <button id='cm-reboot-button3'><font size='3px'>RESTART</font></button> button in ComfyUI.`);
|
||||
|
||||
const rebootButton = document.getElementById('cm-reboot-button3');
|
||||
const self = this;
|
||||
|
||||
rebootButton.addEventListener("click", rebootAPI);
|
||||
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
}
|
||||
else {
|
||||
app.ui.dialog.show(`Failed to install '${packages}'<BR>See terminal log.`);
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
show_message(`Failed to install '${packages}'<BR>See terminal log.`);
|
||||
}
|
||||
}
|
||||
|
||||
@ -116,21 +137,24 @@ export async function install_via_git_url(url, manager_dialog) {
|
||||
}
|
||||
|
||||
if(!isValidURL(url)) {
|
||||
app.ui.dialog.show(`Invalid Git url '${url}'`);
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
show_message(`Invalid Git url '${url}'`);
|
||||
return;
|
||||
}
|
||||
|
||||
app.ui.dialog.show(`Wait...<BR><BR>Installing '${url}'`);
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
show_message(`Wait...<BR><BR>Installing '${url}'`);
|
||||
|
||||
const res = await api.fetchApi("/customnode/install/git_url", {
|
||||
method: "POST",
|
||||
body: url,
|
||||
});
|
||||
|
||||
if(res.status == 403) {
|
||||
show_message('This action is not allowed with this security level configuration.');
|
||||
return;
|
||||
}
|
||||
|
||||
if(res.status == 200) {
|
||||
app.ui.dialog.show(`'${url}' is installed<BR>To apply the installed custom node, please <button id='cm-reboot-button4'><font size='3px'>RESTART</font></button> ComfyUI.`);
|
||||
show_message(`'${url}' is installed<BR>To apply the installed custom node, please <button id='cm-reboot-button4'><font size='3px'>RESTART</font></button> ComfyUI.`);
|
||||
|
||||
const rebootButton = document.getElementById('cm-reboot-button4');
|
||||
const self = this;
|
||||
@ -141,12 +165,9 @@ export async function install_via_git_url(url, manager_dialog) {
|
||||
manager_dialog.close();
|
||||
}
|
||||
});
|
||||
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
}
|
||||
else {
|
||||
app.ui.dialog.show(`Failed to install '${url}'<BR>See terminal log.`);
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
show_message(`Failed to install '${url}'<BR>See terminal log.`);
|
||||
}
|
||||
}
|
||||
|
||||
@ -158,15 +179,9 @@ export async function free_models() {
|
||||
});
|
||||
|
||||
if(res.status == 200) {
|
||||
app.ui.dialog.show('Models have been unloaded.')
|
||||
show_message('Models have been unloaded.')
|
||||
}
|
||||
else {
|
||||
app.ui.dialog.show('Unloading of models failed.<BR><BR>Installed ComfyUI may be an outdated version.')
|
||||
show_message('Unloading of models failed.<BR><BR>Installed ComfyUI may be an outdated version.')
|
||||
}
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
}
|
||||
|
||||
export function show_message(msg) {
|
||||
app.ui.dialog.show(msg);
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
}
|
||||
@ -1,7 +1,7 @@
|
||||
import { app } from "../../scripts/app.js";
|
||||
import { api } from "../../scripts/api.js"
|
||||
import { ComfyDialog, $el } from "../../scripts/ui.js";
|
||||
import { install_checked_custom_node, manager_instance, rebootAPI } from "./common.js";
|
||||
import { install_checked_custom_node, manager_instance, rebootAPI, show_message } from "./common.js";
|
||||
|
||||
async function install_model(target) {
|
||||
if(ModelInstaller.instance) {
|
||||
@ -20,8 +20,7 @@ async function install_model(target) {
|
||||
return true;
|
||||
}
|
||||
catch(exception) {
|
||||
app.ui.dialog.show(`Install failed: ${target.title} / ${exception}`);
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
show_message(`Install failed: ${target.title} / ${exception}`);
|
||||
return false;
|
||||
}
|
||||
finally {
|
||||
|
||||
@ -1,24 +1,28 @@
|
||||
import { app } from "../../scripts/app.js";
|
||||
import { api } from "../../scripts/api.js"
|
||||
import { ComfyDialog, $el } from "../../scripts/ui.js";
|
||||
import { manager_instance, rebootAPI } from "./common.js";
|
||||
import { manager_instance, rebootAPI, show_message } from "./common.js";
|
||||
|
||||
|
||||
async function restore_snapshot(target) {
|
||||
if(SnapshotManager.instance) {
|
||||
try {
|
||||
const response = await api.fetchApi(`/snapshot/restore?target=${target}`, { cache: "no-store" });
|
||||
|
||||
if(response.status == 403) {
|
||||
show_message('This action is not allowed with this security level configuration.');
|
||||
return false;
|
||||
}
|
||||
|
||||
if(response.status == 400) {
|
||||
app.ui.dialog.show(`Restore snapshot failed: ${target.title} / ${exception}`);
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
show_message(`Restore snapshot failed: ${target.title} / ${exception}`);
|
||||
}
|
||||
|
||||
app.ui.dialog.close();
|
||||
return true;
|
||||
}
|
||||
catch(exception) {
|
||||
app.ui.dialog.show(`Restore snapshot failed: ${target.title} / ${exception}`);
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
show_message(`Restore snapshot failed: ${target.title} / ${exception}`);
|
||||
return false;
|
||||
}
|
||||
finally {
|
||||
@ -32,17 +36,21 @@ async function remove_snapshot(target) {
|
||||
if(SnapshotManager.instance) {
|
||||
try {
|
||||
const response = await api.fetchApi(`/snapshot/remove?target=${target}`, { cache: "no-store" });
|
||||
|
||||
if(response.status == 403) {
|
||||
show_message('This action is not allowed with this security level configuration.');
|
||||
return false;
|
||||
}
|
||||
|
||||
if(response.status == 400) {
|
||||
app.ui.dialog.show(`Remove snapshot failed: ${target.title} / ${exception}`);
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
show_message(`Remove snapshot failed: ${target.title} / ${exception}`);
|
||||
}
|
||||
|
||||
app.ui.dialog.close();
|
||||
return true;
|
||||
}
|
||||
catch(exception) {
|
||||
app.ui.dialog.show(`Restore snapshot failed: ${target.title} / ${exception}`);
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
show_message(`Restore snapshot failed: ${target.title} / ${exception}`);
|
||||
return false;
|
||||
}
|
||||
finally {
|
||||
@ -58,8 +66,7 @@ async function save_current_snapshot() {
|
||||
return true;
|
||||
}
|
||||
catch(exception) {
|
||||
app.ui.dialog.show(`Backup snapshot failed: ${exception}`);
|
||||
app.ui.dialog.element.style.zIndex = 10010;
|
||||
show_message(`Backup snapshot failed: ${exception}`);
|
||||
return false;
|
||||
}
|
||||
finally {
|
||||
|
||||
@ -9,16 +9,108 @@
|
||||
"description": "If you see this message, your ComfyUI-Manager is outdated.\nDev channel provides only the list of the developing nodes. If you want to find the complete node list, please go to the Default channel."
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
"author": "huchenlei",
|
||||
"title": "ComfyUI-IC-Light",
|
||||
"id": "ic-light-huchenlei",
|
||||
"reference": "https://github.com/huchenlei/ComfyUI-IC-Light",
|
||||
"author": "ejektaflex",
|
||||
"title": "ComfyUI-Ty",
|
||||
"reference": "https://github.com/ejektaflex/ComfyUI-Ty",
|
||||
"files": [
|
||||
"https://github.com/huchenlei/ComfyUI-IC-Light"
|
||||
"https://github.com/ejektaflex/ComfyUI-Ty"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI native implementation of [a/IC-Light](https://github.com/lllyasviel/IC-Light). [w/It is not possible to install both because kijai's ComfyUI-IC-Light and another repository have the same name.]"
|
||||
"description": "Nodes:Lora Block Weight Regex Loader"
|
||||
},
|
||||
{
|
||||
"author": "88IO",
|
||||
"title": "ComfyUI Image Reordering Plugins [WIP]",
|
||||
"reference": "https://github.com/88IO/ComfyUI-ImageReorder",
|
||||
"files": [
|
||||
"https://github.com/88IO/ComfyUI-ImageReorder"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom node reorder multiple image frames based on indexes or curves."
|
||||
},
|
||||
{
|
||||
"author": "christian-byrne",
|
||||
"title": "Python Interpreter ComfyUI Node [UNSAFE]",
|
||||
"reference": "https://github.com/christian-byrne/python-interpreter-node",
|
||||
"files": [
|
||||
"https://github.com/christian-byrne/python-interpreter-node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "For debugging, parsing data, generating random values, converting types, testing custom nodes faster.\nReference and use variables in the code using the same names as the inputs in the UI\nWrapper class around tensors with operator overloading for doing common image manipulation tasks.I might remove this aspect\n[w/This extension allows you to run programs through Python code in your workflow, which may not be secure. Use with caution.]"
|
||||
},
|
||||
{
|
||||
"author": "sofakid",
|
||||
"title": "dandy [UNSAFE]",
|
||||
"reference": "https://github.com/sofakid/dandy",
|
||||
"files": [
|
||||
"https://github.com/sofakid/dandy"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Dandy is a JavaScript bridge for ComfyUI. It includes everything you need to make JavaScript enabled extensions, or just load and code in little editor nodes right in ComfyUI.[w/This code can cause security issues because it allows for the execution of arbitrary JavaScript input.]"
|
||||
},
|
||||
{
|
||||
"author": "tachyon-beep",
|
||||
"title": "comfyui-simplefeed [UNSAFE]",
|
||||
"reference": "https://github.com/tachyon-beep/comfyui-simplefeed",
|
||||
"files": [
|
||||
"https://github.com/tachyon-beep/comfyui-simplefeed"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A simple image feed for comfyUI which is easily configurable and easily extensible.\nUse the filter button to select which nodes write to the feed. Under settings, there are options that allow you: Position the feed. Set a max iamge count for the feed. Set oldest to newest or newest to oldest."
|
||||
},
|
||||
{
|
||||
"author": "liusida",
|
||||
"title": "ComfyUI-Sida-Remove-Image [UNSAFE]",
|
||||
"reference": "https://github.com/liusida/ComfyUI-Sida-Remove-Image",
|
||||
"files": [
|
||||
"https://github.com/liusida/ComfyUI-Sida-Remove-Image"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: LoadImageWithPrivacy, RemoveImage.[w/This extension is not secure because it provides the capability to delete files from arbitrary paths.]"
|
||||
},
|
||||
{
|
||||
"author": "shadowcz007",
|
||||
"title": "ComfyUI-PuLID [TEST]",
|
||||
"reference": "https://github.com/shadowcz007/ComfyUI-PuLID-Test",
|
||||
"files": [
|
||||
"https://github.com/shadowcz007/ComfyUI-PuLID-Test"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "[a/PuLID](https://github.com/ToTheBeginning/PuLID) ComfyUI native implementation."
|
||||
},
|
||||
{
|
||||
"author": "sangeet",
|
||||
"title": "comfyui-testui [TEST]",
|
||||
"reference": "https://github.com/sangeet/comfyui-testui",
|
||||
"files": [
|
||||
"https://github.com/sangeet/comfyui-testui"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Simple Frontend For ComfyUI workflow"
|
||||
},
|
||||
{
|
||||
"author": "Elawphant",
|
||||
"title": "ComfyUI-MusicGen [WIP]",
|
||||
"id": "musicgen",
|
||||
"reference": "https://github.com/Elawphant/ComfyUI-MusicGen",
|
||||
"files": [
|
||||
"https://github.com/Elawphant/ComfyUI-MusicGen"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI for Meta MusicGen."
|
||||
},
|
||||
{
|
||||
"author": "jtscmw01",
|
||||
"title": "ComfyUI-DiffBIR",
|
||||
"id": "diffbir",
|
||||
"reference": "https://github.com/jtscmw01/ComfyUI-DiffBIR",
|
||||
"files": [
|
||||
"https://github.com/jtscmw01/ComfyUI-DiffBIR"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This extension provides [a/DiffBIR](https://github.com/XPixelGroup/DiffBIR) feature."
|
||||
},
|
||||
{
|
||||
"author": "Levy1417",
|
||||
|
||||
@ -1,5 +1,15 @@
|
||||
{
|
||||
"custom_nodes": [
|
||||
{
|
||||
"author": "meimeilook",
|
||||
"title": "ComfyUI_IPAdapter_plus.old [backward compatbility]",
|
||||
"reference": "https://github.com/meimeilook/ComfyUI_IPAdapter_plus.old",
|
||||
"files": [
|
||||
"https://github.com/meimeilook/ComfyUI_IPAdapter_plus.old"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This repo is created to provide backward compatibility for workflows configured with the old IPAdapter."
|
||||
},
|
||||
{
|
||||
"author": "ZHO-ZHO-ZHO",
|
||||
"title": "Dr.Lt.Data/ComfyUI-YoloWorld-EfficientSAM",
|
||||
|
||||
@ -60,16 +60,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Please note that the ImageTextOverlay project is no longer supported and has been moved to a new repository. For ongoing developments, contributions, and issues, please refer to the new repository at: [a/https://github.com/Big-Idea-Technology/ComfyUI-Book-Tools](https://github.com/Big-Idea-Technology/ComfyUI-Book-Tools)"
|
||||
},
|
||||
{
|
||||
"author": "meimeilook",
|
||||
"title": "ComfyUI_IPAdapter_plus.old [backward compatbility]",
|
||||
"reference": "https://github.com/meimeilook/ComfyUI_IPAdapter_plus.old",
|
||||
"files": [
|
||||
"https://github.com/meimeilook/ComfyUI_IPAdapter_plus.old"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This repo is created to provide backward compatibility for workflows configured with the old IPAdapter."
|
||||
},
|
||||
{
|
||||
"author": "mlinmg",
|
||||
"title": "LaMa Preprocessor [DEPRECATED]",
|
||||
|
||||
@ -9,9 +9,116 @@
|
||||
"description": "If you see this message, your ComfyUI-Manager is outdated.\nRecent channel provides only the list of the latest nodes. If you want to find the complete node list, please go to the Default channel.\nMaking LoRA has never been easier!"
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
{
|
||||
"author": "kaanyalova",
|
||||
"title": "Extended Image Formats for ComfyUI",
|
||||
"id": "extended-image-format",
|
||||
"reference": "https://github.com/kaanyalova/ComfyUI_ExtendedImageFormats",
|
||||
"files": [
|
||||
"https://github.com/kaanyalova/ComfyUI_ExtendedImageFormats"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Adds a custom node for saving images in webp, jpeg, avif, jxl (no metadata) and supports loading workflows from saved images"
|
||||
},
|
||||
{
|
||||
"author": "badayvedat",
|
||||
"title": "ComfyUI-fal-Connector",
|
||||
"id": "fal",
|
||||
"reference": "https://github.com/badayvedat/ComfyUI-fal-Connector",
|
||||
"files": [
|
||||
"https://github.com/badayvedat/ComfyUI-fal-Connector"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "The ComfyUI-fal-Connector is a tool designed to provide an integration between ComfyUI and fal. This extension allows users to execute their ComfyUI workflows directly on [a/fal.ai](https://fal.ai/). This enables users to leverage the computational power and resources provided by fal.ai for running their ComfyUI workflows."
|
||||
},
|
||||
{
|
||||
"author": "nat-chan",
|
||||
"title": "comfyui-paint",
|
||||
"reference": "https://github.com/nat-chan/comfyui-paint",
|
||||
"files": [
|
||||
"https://github.com/nat-chan/comfyui-paint"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "comfyui-paint"
|
||||
},
|
||||
{
|
||||
"author": "katalist-ai",
|
||||
"title": "comfyUI-nsfw-detection",
|
||||
"id": "nsfw-detection",
|
||||
"reference": "https://github.com/katalist-ai/comfyUI-nsfw-detection",
|
||||
"files": [
|
||||
"https://github.com/katalist-ai/comfyUI-nsfw-detection"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: NudenetDetector"
|
||||
},
|
||||
{
|
||||
"author": "royceschultz",
|
||||
"title": "ComfyUI-Notifications",
|
||||
"reference": "https://github.com/royceschultz/ComfyUI-Notifications",
|
||||
"files": [
|
||||
"https://github.com/royceschultz/ComfyUI-Notifications"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Send notifications when a workflow completes."
|
||||
},
|
||||
{
|
||||
"author": "GraftingRayman",
|
||||
"title": "GR Prompt Selector",
|
||||
"id": "gr-prompt-selector",
|
||||
"reference": "https://github.com/GraftingRayman/ComfyUI_GraftingRayman",
|
||||
"files": [
|
||||
"https://github.com/GraftingRayman/ComfyUI_GraftingRayman"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Prompt and Masking nodes."
|
||||
},
|
||||
{
|
||||
"author": "nat-chan",
|
||||
"title": "ComfyUI-graphToPrompt",
|
||||
"id": "graph2prompt",
|
||||
"reference": "https://github.com/nat-chan/ComfyUI-graphToPrompt",
|
||||
"files": [
|
||||
"https://github.com/nat-chan/ComfyUI-graphToPrompt"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "workflow.json -> workflow_api.json"
|
||||
},
|
||||
{
|
||||
"author": "oztrkoguz",
|
||||
"title": "ComfyUI StoryCreater",
|
||||
"id": "storycreater",
|
||||
"reference": "https://github.com/oztrkoguz/ComfyUI_StoryCreator",
|
||||
"files": [
|
||||
"https://github.com/oztrkoguz/ComfyUI_StoryCreator"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:story_sampler_simple, text2, kosmos2_sampler.\nI created a dataset for generating short stories [a/Short-Story](https://huggingface.co/datasets/oztrkoguz/Short-Story) and used it to fine-tune my own model using Phi-3."
|
||||
},
|
||||
{
|
||||
"author": "jtydhr88",
|
||||
"title": "ComfyUI LayerDivider",
|
||||
"id": "layer-divider",
|
||||
"reference": "https://github.com/jtydhr88/ComfyUI-LayerDivider",
|
||||
"files": [
|
||||
"https://github.com/jtydhr88/ComfyUI-LayerDivider"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI LayerDivider is custom nodes that generating layered psd files inside ComfyUI[w/This plugin depends on Python 3.10, which means we cannot use the default Python that comes with ComfyUI, as it is Python 3.11. For this reason, it is recommended to use conda to manage and create the ComfyUI runtime environment.]"
|
||||
},
|
||||
{
|
||||
"author": "ShmuelRonen",
|
||||
"title": "Wav2Lip Node for ComfyUI",
|
||||
"id": "wav2lip",
|
||||
"reference": "https://github.com/ShmuelRonen/ComfyUI_wav2lip",
|
||||
"files": [
|
||||
"https://github.com/ShmuelRonen/ComfyUI_wav2lip"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "The Wav2Lip node is a custom node for ComfyUI that allows you to perform lip-syncing on videos using the Wav2Lip model. It takes an input video and an audio file and generates a lip-synced output video."
|
||||
},
|
||||
{
|
||||
"author": "ray",
|
||||
"title": "Light Gradient for ComfyUI",
|
||||
@ -24,15 +131,124 @@
|
||||
"description": "Nodes:Image Gradient,Mask Gradient"
|
||||
},
|
||||
{
|
||||
"author": "YouFunnyGuys",
|
||||
"title": "ComfyUI_YFG_Comical",
|
||||
"author": "ray",
|
||||
"title": "comfyui's gaffer(ComfyUI native implementation of IC-Light. )",
|
||||
"id": "gaffer",
|
||||
"reference": "https://github.com/huagetai/ComfyUI-Gaffer",
|
||||
"files": [
|
||||
"https://github.com/huagetai/ComfyUI-Gaffer"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:Load ICLight Model,Apply ICLight,Simple Light Source,Calculate Normal Map"
|
||||
},
|
||||
{
|
||||
"author": "christian-byrne",
|
||||
"title": "img2txt-comfyui-nodes",
|
||||
"id": "img2txt-nodes",
|
||||
"reference": "https://github.com/christian-byrne/img2txt-comfyui-nodes",
|
||||
"files": [
|
||||
"https://github.com/christian-byrne/img2txt-comfyui-nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:img2txt BLIP SalesForce Large"
|
||||
},
|
||||
{
|
||||
"author": "huchenlei",
|
||||
"title": "ComfyUI-IC-Light-Native",
|
||||
"id": "ic-light-native",
|
||||
"reference": "https://github.com/huchenlei/ComfyUI-IC-Light-Native",
|
||||
"files": [
|
||||
"https://github.com/huchenlei/ComfyUI-IC-Light-Native"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI native implementation of [a/IC-Light](https://github.com/lllyasviel/IC-Light)."
|
||||
},
|
||||
{
|
||||
"author": "lquesada",
|
||||
"title": "ComfyUI-Inpaint-CropAndStitch",
|
||||
"reference": "https://github.com/lquesada/ComfyUI-Inpaint-CropAndStitch",
|
||||
"files": [
|
||||
"https://github.com/lquesada/ComfyUI-Inpaint-CropAndStitch"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "'✂️ Inpaint Crop' is a node that crops an image before sampling. The context area can be specified via the mask, expand pixels and expand factor or via a separate (optional) mask.\n'✂️ Inpaint Stitch' is a node that stitches the inpainted image back into the original image without altering unmasked areas."
|
||||
},
|
||||
{
|
||||
"author": "laksjdjf",
|
||||
"title": "cgem156-ComfyUI🍌",
|
||||
"id": "cgem156",
|
||||
"reference": "https://github.com/laksjdjf/cgem156-ComfyUI",
|
||||
"files": [
|
||||
"https://github.com/laksjdjf/cgem156-ComfyUI"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "The custom nodes of laksjdjf have been integrated into the node pack of cgem156🍌."
|
||||
},
|
||||
{
|
||||
"author": "ruiqutech",
|
||||
"title": "RuiquNodes for ComfyUI",
|
||||
"id": "RuiquNodes",
|
||||
"reference": "https://github.com/ruiqutech/ComfyUI-RuiquNodes",
|
||||
"files": [
|
||||
"https://github.com/ruiqutech/ComfyUI-RuiquNodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes of EvaluateMultiple1, EvaluateMultiple3...\nSupport the execution of any fragment of Python code, generating multiple outputs from multiple inputs."
|
||||
},
|
||||
{
|
||||
"author": "fmatray",
|
||||
"title": "ComfyUI_BattlemapGrid",
|
||||
"id": "battlemap-grid",
|
||||
"reference": "https://github.com/fmatray/ComfyUI_BattlemapGrid",
|
||||
"files": [
|
||||
"https://github.com/fmatray/ComfyUI_BattlemapGrid"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes for ComfyUI in order to generate battelmaps"
|
||||
},
|
||||
{
|
||||
"author": "teward",
|
||||
"title": "ComfyUI-Helper-Nodes",
|
||||
"id": "helper-nodes",
|
||||
"reference": "https://github.com/teward/ComfyUI-Helper-Nodes",
|
||||
"files": [
|
||||
"https://github.com/teward/ComfyUI-Helper-Nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: HelperNodes_MultilineStringLiteral, HelperNodes_StringLiteral, HelperNodes_Steps, HelperNodes_CfgScale, HelperNodes_WidthHeight, HelperNodes_SchedulerSelector, HelperNodes_SamplerSelector, ..."
|
||||
},
|
||||
{
|
||||
"author": "smthemex",
|
||||
"title": "ComfyUI_HiDiffusion_Pro",
|
||||
"id": "hidiffusion-pro",
|
||||
"reference": "https://github.com/smthemex/ComfyUI_HiDiffusion_Pro",
|
||||
"files": [
|
||||
"https://github.com/smthemex/ComfyUI_HiDiffusion_Pro"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A HiDiffusion node for ComfyUI."
|
||||
},
|
||||
{
|
||||
"author": "ray",
|
||||
"title": "Light Gradient for ComfyUI",
|
||||
"id": "light-gradient",
|
||||
"reference": "https://github.com/huagetai/ComfyUI_LightGradient",
|
||||
"files": [
|
||||
"https://github.com/huagetai/ComfyUI_LightGradient"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:Image Gradient,Mask Gradient"
|
||||
},
|
||||
{
|
||||
"author": "YFG",
|
||||
"title": "😸 YFG Comical Nodes",
|
||||
"id": "comical",
|
||||
"reference": "https://github.com/gonzalu/ComfyUI_YFG_Comical",
|
||||
"files": [
|
||||
"https://github.com/gonzalu/ComfyUI_YFG_Comical"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: image2histogram"
|
||||
"description": "Image Historgram Generator - Outputs a set of images displaying the Histogram of the input image. Nodes: img2histograms, img2histogramsSelf"
|
||||
},
|
||||
{
|
||||
"author": "kijai",
|
||||
@ -480,218 +696,6 @@
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This is a custom node that allows you to easily call up and set image size presets. Settings can be made by editing the included config.yaml. It is almost identical to Comfyroll Studio's CR AspectRatio. I created it because I wanted to easily edit the presets."
|
||||
},
|
||||
{
|
||||
"author": "cfreilich",
|
||||
"title": "Virtuoso Nodes for ComfyUI",
|
||||
"reference": "https://github.com/chrisfreilich/virtuoso-nodes",
|
||||
"files": [
|
||||
"https://github.com/chrisfreilich/virtuoso-nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Photoshop type functions and adjustment layers: 30 blend modes, Selective Color, Blend If, Color Balance, Solid Color Images, Black and White, Hue/Saturation, Levels, and RGB Splitting and Merging."
|
||||
},
|
||||
{
|
||||
"author": "Shinsplat",
|
||||
"title": "ComfyUI-Shinsplat",
|
||||
"reference": "https://github.com/Shinsplat/ComfyUI-Shinsplat",
|
||||
"files": [
|
||||
"https://github.com/Shinsplat/ComfyUI-Shinsplat"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: Clip Text Encode (Shinsplat), Clip Text Encode SDXL (Shinsplat), Lora Loader (Shinsplat)."
|
||||
},
|
||||
{
|
||||
"author": "daxcay",
|
||||
"title": "ComfyUI-DRMN",
|
||||
"reference": "https://github.com/daxcay/ComfyUI-DRMN",
|
||||
"files": [
|
||||
"https://github.com/daxcay/ComfyUI-DRMN"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Data Research And Manipulators Nodes for Model Trainers, Artists, Designers and Animators. Captions, Visualizer, Text Manipulator"
|
||||
},
|
||||
{
|
||||
"author": "kealiu",
|
||||
"title": "ComfyUI-ZeroShot-MTrans",
|
||||
"reference": "https://github.com/kealiu/ComfyUI-ZeroShot-MTrans",
|
||||
"files": [
|
||||
"https://github.com/kealiu/ComfyUI-ZeroShot-MTrans"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "An unofficial ComfyUI custom node for [a/Zero-Shot Material Transfer from a Single Image](https://ttchengab.github.io/zest), Given an input image (e.g., a photo of an apple) and a single material exemplar image (e.g., a golden bowl), ZeST can transfer the gold material from the exemplar onto the apple with accurate lighting cues while making everything else consistent."
|
||||
},
|
||||
{
|
||||
"author": "fofr",
|
||||
"title": "ComfyUI-HyperSDXL1StepUnetScheduler (ByteDance)",
|
||||
"id": "hypersdxl",
|
||||
"reference": "https://github.com/fofr/ComfyUI-HyperSDXL1StepUnetScheduler",
|
||||
"files": [
|
||||
"https://github.com/fofr/ComfyUI-HyperSDXL1StepUnetScheduler"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Original author is ByteDance.\nComfyUI sampler for HyperSDXL UNet\nPorted from: [a/https://huggingface.co/ByteDance/Hyper-SD](https://huggingface.co/ByteDance/Hyper-SD)"
|
||||
},
|
||||
{
|
||||
"author": "TaiTair",
|
||||
"title": "Simswap Node for ComfyUI",
|
||||
"id": "simswap",
|
||||
"reference": "https://github.com/TaiTair/comfyui-simswap",
|
||||
"files": [
|
||||
"https://github.com/TaiTair/comfyui-simswap"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A hacky implementation of Simswap based on [a/Comfyui ReActor Node 0.5.1](https://github.com/Gourieff/comfyui-reactor-node) and [a/Simswap](https://github.com/neuralchen/SimSwap)."
|
||||
},
|
||||
{
|
||||
"author": "jeffy5",
|
||||
"title": "comfyui-fb-utils",
|
||||
"reference": "https://github.com/jeffy5/comfyui-faceless-node",
|
||||
"files": [
|
||||
"https://github.com/jeffy5/comfyui-faceless-node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:Load Video, Load Frames, Save Video, Face Swap, Face Restore, Face Swap (Video), Face Restore (Video)"
|
||||
},
|
||||
{
|
||||
"author": "chaojie",
|
||||
"title": "ComfyUI-SimDA",
|
||||
"reference": "https://github.com/chaojie/ComfyUI-SimDA",
|
||||
"files": [
|
||||
"https://github.com/chaojie/ComfyUI-SimDA"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:SimDATrain, SimDALoader, SimDARun, VHS_FILENAMES_STRING_SimDA"
|
||||
},
|
||||
{
|
||||
"author": "randjtw",
|
||||
"title": "advance-aesthetic-score",
|
||||
"reference": "https://github.com/randjtw/advance-aesthetic-score",
|
||||
"files": [
|
||||
"https://github.com/randjtw/advance-aesthetic-score"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:Advance Aesthetic Score"
|
||||
},
|
||||
{
|
||||
"author": "shinich39",
|
||||
"title": "comfyui-local-db",
|
||||
"reference": "https://github.com/shinich39/comfyui-local-db",
|
||||
"files": [
|
||||
"https://github.com/shinich39/comfyui-local-db"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Store text to Key-Values pair json."
|
||||
},
|
||||
{
|
||||
"author": "FredBill1",
|
||||
"title": "comfyui-fb-utils",
|
||||
"reference": "https://github.com/FredBill1/comfyui-fb-utils",
|
||||
"files": [
|
||||
"https://github.com/FredBill1/comfyui-fb-utils"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:FBStringJoin, FBStringSplit, FBMultilineStringList, FBMultilineString"
|
||||
},
|
||||
{
|
||||
"author": "lquesada",
|
||||
"title": "ComfyUI-Prompt-Combinator",
|
||||
"reference": "https://github.com/lquesada/ComfyUI-Prompt-Combinator",
|
||||
"files": [
|
||||
"https://github.com/lquesada/ComfyUI-Prompt-Combinator"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "'🔢 Prompt Combinator' is a node that generates all possible combinations of prompts from several lists of strings."
|
||||
},
|
||||
{
|
||||
"author": "huchenlei",
|
||||
"title": "ComfyUI-openpose-editor",
|
||||
"reference": "https://github.com/huchenlei/ComfyUI-openpose-editor",
|
||||
"files": [
|
||||
"https://github.com/huchenlei/ComfyUI-openpose-editor"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Port of [a/https://github.com/huchenlei/sd-webui-openpose-editor](https://github.com/huchenlei/sd-webui-openpose-editor) in ComfyUI"
|
||||
},
|
||||
{
|
||||
"author": "longgui0318",
|
||||
"title": "comfyui-magic-clothing",
|
||||
"reference": "https://github.com/longgui0318/comfyui-magic-clothing",
|
||||
"files": [
|
||||
"https://github.com/longgui0318/comfyui-magic-clothing"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "The comfyui supported version of the [a/Magic Clothing](https://github.com/ShineChen1024/MagicClothing) project, not the diffusers version, allows direct integration with modules such as ipadapter"
|
||||
},
|
||||
{
|
||||
"author": "ty0x2333",
|
||||
"title": "ComfyUI-Dev-Utils",
|
||||
"reference": "https://github.com/ty0x2333/ComfyUI-Dev-Utils",
|
||||
"files": [
|
||||
"https://github.com/ty0x2333/ComfyUI-Dev-Utils"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Execution Time Analysis, Reroute Enhancement, Node collection for developers."
|
||||
},
|
||||
{
|
||||
"author": "chaojie",
|
||||
"title": "ComfyUI-LaVIT",
|
||||
"reference": "https://github.com/chaojie/ComfyUI-LaVIT",
|
||||
"files": [
|
||||
"https://github.com/chaojie/ComfyUI-LaVIT"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:VideoLaVITLoader, VideoLaVITT2V, VideoLaVITI2V, VideoLaVITI2VLong, VideoLaVITT2VLong, VideoLaVITI2I"
|
||||
},
|
||||
{
|
||||
"author": "smthemex",
|
||||
"title": "ComfyUI_Pipeline_Tool",
|
||||
"reference": "https://github.com/smthemex/ComfyUI_Pipeline_Tool",
|
||||
"files": [
|
||||
"https://github.com/smthemex/ComfyUI_Pipeline_Tool"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A tool for novice users in Chinese Mainland to call the huggingface hub and download the huggingface models."
|
||||
},
|
||||
{
|
||||
"author": "blueraincoatli",
|
||||
"title": "comfyUI_SillyNodes",
|
||||
"reference": "https://github.com/blueraincoatli/comfyUI_SillyNodes",
|
||||
"files": [
|
||||
"https://github.com/blueraincoatli/comfyUI_SillyNodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Using rgthree's fast_group_muter and bookmark nodes, introduce the pyautogui library to simulate clicks and hotkeys, and run groups in sequence. screen manipulation is involved"
|
||||
},
|
||||
{
|
||||
"author": "Fannovel16",
|
||||
"title": "ComfyUI-MagickWand",
|
||||
"reference": "https://github.com/Fannovel16/ComfyUI-MagickWand",
|
||||
"files": [
|
||||
"https://github.com/Fannovel16/ComfyUI-MagickWand"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Proper implementation of ImageMagick - the famous software suite for editing and manipulating digital images to ComfyUI using [a/wandpy](https://github.com/emcconville/wand).\nNOTE: You need to install ImageMagick, manually."
|
||||
},
|
||||
{
|
||||
"author": "MinusZoneAI",
|
||||
"title": "ComfyUI-Prompt-MZ",
|
||||
"reference": "https://github.com/MinusZoneAI/ComfyUI-Prompt-MZ",
|
||||
"files": [
|
||||
"https://github.com/MinusZoneAI/ComfyUI-Prompt-MZ"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Use llama.cpp to help generate some nodes for prompt word related work"
|
||||
},
|
||||
{
|
||||
"author": "AIFSH",
|
||||
"title": "ComfyUI-WhisperX",
|
||||
"reference": "https://github.com/AIFSH/ComfyUI-WhisperX",
|
||||
"files": [
|
||||
"https://github.com/AIFSH/ComfyUI-WhisperX"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "a comfyui cuatom node for audio subtitling based on [a/whisperX](https://github.com/m-bain/whisperX.git) and [a/translators](https://github.com/UlionTse/translators)"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -416,6 +416,7 @@
|
||||
"IntToString-badger",
|
||||
"IntToStringAdvanced-badger",
|
||||
"LoadImageAdvanced-badger",
|
||||
"LoadImagesFromDirListAdvanced-badger",
|
||||
"SegmentToMaskByPoint-badger",
|
||||
"SimpleBoolean-badger",
|
||||
"StringToFizz-badger",
|
||||
@ -682,6 +683,7 @@
|
||||
"ComfyUIDeployExternalLora",
|
||||
"ComfyUIDeployExternalNumber",
|
||||
"ComfyUIDeployExternalNumberInt",
|
||||
"ComfyUIDeployExternalNumberSlider",
|
||||
"ComfyUIDeployExternalText",
|
||||
"ComfyUIDeployExternalVid",
|
||||
"ComfyUIDeployExternalVideo"
|
||||
@ -1123,8 +1125,13 @@
|
||||
[
|
||||
"Automatic CFG",
|
||||
"Automatic CFG - Advanced",
|
||||
"Automatic CFG - Attention modifiers",
|
||||
"Automatic CFG - Attention modifiers tester",
|
||||
"Automatic CFG - Custom attentions",
|
||||
"Automatic CFG - Excellent attention",
|
||||
"Automatic CFG - Negative",
|
||||
"Automatic CFG - Post rescale only",
|
||||
"Automatic CFG - Preset Loader",
|
||||
"Automatic CFG - Unpatch function",
|
||||
"Automatic CFG - Warp Drive",
|
||||
"SAG delayed activation"
|
||||
@ -1412,6 +1419,7 @@
|
||||
"TilePreprocessor",
|
||||
"UniFormer-SemSegPreprocessor",
|
||||
"Unimatch_OptFlowPreprocessor",
|
||||
"UpperBodyTrackingFromPoseKps",
|
||||
"Zoe-DepthMapPreprocessor",
|
||||
"Zoe_DepthAnythingPreprocessor"
|
||||
],
|
||||
@ -1646,12 +1654,24 @@
|
||||
"title_aux": "ReActor Node for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/GraftingRayman/ComfyUI_GraftingRayman": [
|
||||
[
|
||||
"GR Image Resize",
|
||||
"GR Mask Create",
|
||||
"GR Mask Resize",
|
||||
"GR Multi Mask Create",
|
||||
"GR Prompt Selector"
|
||||
],
|
||||
{
|
||||
"title_aux": "GR Prompt Selector"
|
||||
}
|
||||
],
|
||||
"https://github.com/Guillaume-Fgt/ComfyUI_StableCascadeLatentRatio": [
|
||||
[
|
||||
"StableCascadeLatentRatio"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-ScenarioPrompt"
|
||||
"title_aux": "ComfyUI_StableCascadeLatentRatio"
|
||||
}
|
||||
],
|
||||
"https://github.com/HAL41/ComfyUI-aichemy-nodes": [
|
||||
@ -2117,6 +2137,8 @@
|
||||
"ACN_SparseCtrlMergedLoaderAdvanced",
|
||||
"ACN_SparseCtrlRGBPreprocessor",
|
||||
"ACN_SparseCtrlSpreadMethodNode",
|
||||
"ACN_TimestepKeyframeFromStrengthList",
|
||||
"ACN_TimestepKeyframeInterpolation",
|
||||
"ControlNetLoaderAdvanced",
|
||||
"CustomControlNetWeights",
|
||||
"CustomT2IAdapterWeights",
|
||||
@ -2644,6 +2666,8 @@
|
||||
"DoubleClipTextEncode",
|
||||
"EmbeddingLoader",
|
||||
"FilmCharDir",
|
||||
"FuseImages",
|
||||
"FuseImages2",
|
||||
"HashText",
|
||||
"HueSatLum",
|
||||
"HueShift",
|
||||
@ -2654,6 +2678,7 @@
|
||||
"IntEvaluate",
|
||||
"IntFloatDict",
|
||||
"IntStringDict",
|
||||
"JsonSearch",
|
||||
"LandscapeBackgrounds",
|
||||
"LandscapeDir",
|
||||
"MakeupStylesDir",
|
||||
@ -2664,11 +2689,18 @@
|
||||
"PhotomontageB",
|
||||
"PhotomontageC",
|
||||
"PostSamplerCrop",
|
||||
"PresetLoad",
|
||||
"PresetRemove",
|
||||
"PresetSave",
|
||||
"RandomString",
|
||||
"SDXLEmptyLatent",
|
||||
"SavePrompt",
|
||||
"SaveWithMetaData",
|
||||
"SaveWithMetaData2",
|
||||
"SearchReplace",
|
||||
"SimplePrompts",
|
||||
"SpecificStylesDir",
|
||||
"StringJoin",
|
||||
"TimeStamp",
|
||||
"TricolorComposition",
|
||||
"WorkflowSettings",
|
||||
@ -3483,6 +3515,14 @@
|
||||
"title_aux": "ComfyUI-SVDResizer"
|
||||
}
|
||||
],
|
||||
"https://github.com/ShmuelRonen/ComfyUI_wav2lip": [
|
||||
[
|
||||
"Wav2Lip"
|
||||
],
|
||||
{
|
||||
"title_aux": "Wav2Lip Node for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/Shraknard/ComfyUI-Remover": [
|
||||
[
|
||||
"Remover"
|
||||
@ -3629,7 +3669,8 @@
|
||||
"Image Batch Manager (SuperBeasts.AI)",
|
||||
"Make Resized Mask Batch (SuperBeasts.AI)",
|
||||
"Mask Batch Manager (SuperBeasts.AI)",
|
||||
"Pixel Deflicker (SuperBeasts.AI)"
|
||||
"Pixel Deflicker (SuperBeasts.AI)",
|
||||
"String List Manager (SuperBeasts.AI)"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-SuperBeasts"
|
||||
@ -3948,6 +3989,7 @@
|
||||
"tri3d-atr-parse",
|
||||
"tri3d-atr-parse-batch",
|
||||
"tri3d-clipdrop-bgremove-api",
|
||||
"tri3d-clipdrop-bgreplace-api",
|
||||
"tri3d-composite-image-splitter",
|
||||
"tri3d-dwpose",
|
||||
"tri3d-extract-hand",
|
||||
@ -4493,6 +4535,7 @@
|
||||
"Text Dictionary To Text",
|
||||
"Text Dictionary Update",
|
||||
"Text File History Loader",
|
||||
"Text Find",
|
||||
"Text Find and Replace",
|
||||
"Text Find and Replace Input",
|
||||
"Text Find and Replace by Dictionary",
|
||||
@ -4900,6 +4943,7 @@
|
||||
],
|
||||
"https://github.com/abyz22/image_control": [
|
||||
[
|
||||
"abyz22_AddPrompt",
|
||||
"abyz22_Convertpipe",
|
||||
"abyz22_Editpipe",
|
||||
"abyz22_FirstNonNull",
|
||||
@ -4909,6 +4953,7 @@
|
||||
"abyz22_ImpactWildcardEncode_GetPrompt",
|
||||
"abyz22_Ksampler",
|
||||
"abyz22_Padding Image",
|
||||
"abyz22_RandomMask",
|
||||
"abyz22_RemoveControlnet",
|
||||
"abyz22_SaveImage",
|
||||
"abyz22_SetQueue",
|
||||
@ -4917,6 +4962,7 @@
|
||||
"abyz22_blend_onecolor",
|
||||
"abyz22_blendimages",
|
||||
"abyz22_bypass",
|
||||
"abyz22_censoring",
|
||||
"abyz22_drawmask",
|
||||
"abyz22_lamaInpaint",
|
||||
"abyz22_lamaPreprocessor",
|
||||
@ -5050,12 +5096,13 @@
|
||||
"title_aux": "ComfyUI Image Saver"
|
||||
}
|
||||
],
|
||||
"https://github.com/alisson-anjos/ComfyUI-LLaVA-Describer": [
|
||||
"https://github.com/alisson-anjos/ComfyUI-Ollama-Describer": [
|
||||
[
|
||||
"LLaVaDescriber"
|
||||
"LLaVaDescriber",
|
||||
"OllamaDescriber"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-LLaVA-Describer"
|
||||
"title_aux": "ComfyUI-Ollama-Describer"
|
||||
}
|
||||
],
|
||||
"https://github.com/alpertunga-bile/prompt-generator-comfyui": [
|
||||
@ -5348,6 +5395,18 @@
|
||||
"title_aux": "ComfyUI-ClipScore-Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/badayvedat/ComfyUI-fal-Connector": [
|
||||
[
|
||||
"BooleanInput_fal",
|
||||
"ComboInput_fal",
|
||||
"FloatInput_fal",
|
||||
"IntegerInput_fal",
|
||||
"StringInput_fal"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-fal-Connector"
|
||||
}
|
||||
],
|
||||
"https://github.com/badjeff/comfyui_lora_tag_loader": [
|
||||
[
|
||||
"LoraTagLoader"
|
||||
@ -5883,6 +5942,7 @@
|
||||
"ImageDirIterator",
|
||||
"Modelscopet2v",
|
||||
"Modelscopev2v",
|
||||
"TextFileLineIterator",
|
||||
"VidDirIterator"
|
||||
],
|
||||
{
|
||||
@ -6347,6 +6407,7 @@
|
||||
],
|
||||
"https://github.com/chflame163/ComfyUI_LayerStyle": [
|
||||
[
|
||||
"LayerColor: AutoAdjust",
|
||||
"LayerColor: AutoBrightness",
|
||||
"LayerColor: Brightness & Contrast",
|
||||
"LayerColor: Color of Shadow & Highlight",
|
||||
@ -6453,7 +6514,9 @@
|
||||
"LayerUtility: PromptEmbellish",
|
||||
"LayerUtility: PromptTagger",
|
||||
"LayerUtility: QWenImage2Prompt",
|
||||
"LayerUtility: RGB Value",
|
||||
"LayerUtility: RestoreCropBox",
|
||||
"LayerUtility: Seed",
|
||||
"LayerUtility: SimpleTextImage",
|
||||
"LayerUtility: TextBox",
|
||||
"LayerUtility: TextImage",
|
||||
@ -6461,10 +6524,10 @@
|
||||
"LayerUtility: XY to Percent"
|
||||
],
|
||||
{
|
||||
"author": "Chris Freilich",
|
||||
"description": "This extension provides a blend modes node with 30 blend modes.",
|
||||
"nickname": "Virtuoso Pack - Blend Nodes",
|
||||
"title": "Virtuoso Pack - Blend Modes",
|
||||
"author": "chflame",
|
||||
"description": "A set of nodes for ComfyUI that can composite layer and mask to achieve Photoshop like functionality.",
|
||||
"nickname": "LayerStyle",
|
||||
"title": "LayerStyle",
|
||||
"title_aux": "ComfyUI Layer Style"
|
||||
}
|
||||
],
|
||||
@ -6967,6 +7030,7 @@
|
||||
],
|
||||
"https://github.com/cubiq/ComfyUI_FaceAnalysis": [
|
||||
[
|
||||
"FaceAlign",
|
||||
"FaceAnalysisModels",
|
||||
"FaceBoundingBox",
|
||||
"FaceEmbedDistance"
|
||||
@ -7036,6 +7100,7 @@
|
||||
],
|
||||
"https://github.com/cubiq/ComfyUI_essentials": [
|
||||
[
|
||||
"ApplyCLIPSeg+",
|
||||
"BatchCount+",
|
||||
"CLIPTextEncodeSDXL+",
|
||||
"ConditioningCombineMultiple+",
|
||||
@ -7061,6 +7126,7 @@
|
||||
"ImageSeamCarving+",
|
||||
"KSamplerVariationsStochastic+",
|
||||
"KSamplerVariationsWithNoise+",
|
||||
"LoadCLIPSegModels+",
|
||||
"MaskBatch+",
|
||||
"MaskBlur+",
|
||||
"MaskBoundingBox+",
|
||||
@ -7089,6 +7155,7 @@
|
||||
"https://github.com/cubiq/PuLID_ComfyUI": [
|
||||
[
|
||||
"ApplyPulid",
|
||||
"ApplyPulidAdvanced",
|
||||
"PulidEvaClipLoader",
|
||||
"PulidInsightFaceLoader",
|
||||
"PulidModelLoader"
|
||||
@ -7728,13 +7795,17 @@
|
||||
"FL_CodeNode",
|
||||
"FL_DirectoryCrawl",
|
||||
"FL_Glitch",
|
||||
"FL_HalftonePattern",
|
||||
"FL_HexagonalPattern",
|
||||
"FL_ImageCaptionSaver",
|
||||
"FL_ImageDimensionDisplay",
|
||||
"FL_ImageDurationSync",
|
||||
"FL_ImagePixelator",
|
||||
"FL_ImageRandomizer",
|
||||
"FL_NFTGenerator",
|
||||
"FL_PixelSort",
|
||||
"FL_PromptSelector",
|
||||
"FL_RandomNumber",
|
||||
"FL_Ripple"
|
||||
],
|
||||
{
|
||||
@ -7864,6 +7935,16 @@
|
||||
"title_aux": "As_ComfyUI_CustomNodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/fmatray/ComfyUI_BattlemapGrid": [
|
||||
[
|
||||
"Battlemap Grid",
|
||||
"Map Generator",
|
||||
"Map Generator(Outdoors)"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_BattlemapGrid"
|
||||
}
|
||||
],
|
||||
"https://github.com/fofr/ComfyUI-HyperSDXL1StepUnetScheduler": [
|
||||
[
|
||||
"HyperSDXL1StepUnetScheduler"
|
||||
@ -7943,6 +8024,7 @@
|
||||
],
|
||||
"https://github.com/fsdymy1024/ComfyUI_fsdymy": [
|
||||
[
|
||||
"Preview Image Without Metadata",
|
||||
"Save Image Without Metadata"
|
||||
],
|
||||
{
|
||||
@ -8227,17 +8309,15 @@
|
||||
],
|
||||
"https://github.com/gonzalu/ComfyUI_YFG_Comical": [
|
||||
[
|
||||
"hello_world",
|
||||
"image_histogram_node",
|
||||
"image_histograms_node",
|
||||
"meme_generator_node"
|
||||
"image_histograms_node_compact"
|
||||
],
|
||||
{
|
||||
"author": "YFG",
|
||||
"description": "This extension just outputs Hello World! as a string.",
|
||||
"nickname": "YFG Hello World",
|
||||
"title": "YFG Hello World",
|
||||
"title_aux": "ComfyUI_YFG_Comical"
|
||||
"description": "This extension calculates the histogram of an image and outputs the results as graph images for individual channels as well as RGB and Luminosity.",
|
||||
"nickname": "\ud83d\udc31 YFG Histograms",
|
||||
"title": "YFG Histograms",
|
||||
"title_aux": "\ud83d\ude38 YFG Comical Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/guill/abracadabra-comfyui": [
|
||||
@ -8270,6 +8350,7 @@
|
||||
],
|
||||
"https://github.com/hay86/ComfyUI_AceNodes": [
|
||||
[
|
||||
"ACE_AnyInputSwitchBool",
|
||||
"ACE_AudioLoad",
|
||||
"ACE_AudioPlay",
|
||||
"ACE_AudioSave",
|
||||
@ -8328,7 +8409,8 @@
|
||||
"https://github.com/hay86/ComfyUI_OpenVoice": [
|
||||
[
|
||||
"D_OpenVoice_STS",
|
||||
"D_OpenVoice_TTS"
|
||||
"D_OpenVoice_TTS",
|
||||
"D_OpenVoice_TTS_V2"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI OpenVoice"
|
||||
@ -8336,6 +8418,7 @@
|
||||
],
|
||||
"https://github.com/heshengtao/comfyui_LLM_party": [
|
||||
[
|
||||
"About_us",
|
||||
"CLIPTextEncode_party",
|
||||
"KSampler_party",
|
||||
"LLM",
|
||||
@ -8431,6 +8514,18 @@
|
||||
"title_aux": "ComfyUI-ModelDownloader"
|
||||
}
|
||||
],
|
||||
"https://github.com/huagetai/ComfyUI-Gaffer": [
|
||||
[
|
||||
"ApplyICLight",
|
||||
"CalculateNormalMap",
|
||||
"GrayScaler",
|
||||
"ICLightModelLoader",
|
||||
"LightSource"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui's gaffer(ComfyUI native implementation of IC-Light. )"
|
||||
}
|
||||
],
|
||||
"https://github.com/huagetai/ComfyUI_LightGradient": [
|
||||
[
|
||||
"ImageGradient",
|
||||
@ -8440,6 +8535,16 @@
|
||||
"title_aux": "Light Gradient for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/huchenlei/ComfyUI-IC-Light-Native": [
|
||||
[
|
||||
"ICLightApplyMaskGrey",
|
||||
"ICLightAppply",
|
||||
"VAEEncodeArgMax"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-IC-Light-Native"
|
||||
}
|
||||
],
|
||||
"https://github.com/huchenlei/ComfyUI-layerdiffuse": [
|
||||
[
|
||||
"LayeredDiffusionApply",
|
||||
@ -8790,13 +8895,16 @@
|
||||
"FacelessLoadImageUrl",
|
||||
"FacelessLoadVideo",
|
||||
"FacelessLoadVideoUrl",
|
||||
"FacelessMergeVideos",
|
||||
"FacelessRemoveBackground",
|
||||
"FacelessSaveVideo",
|
||||
"FacelessUploadVideo",
|
||||
"FacelessVideoFaceRestore",
|
||||
"FacelessVideoFaceSwap"
|
||||
"FacelessVideoFaceSwap",
|
||||
"FacelessVideoRemoveBackground"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui-fb-utils"
|
||||
"title_aux": "Faceless Node for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/jesenzhang/ComfyUI_StreamDiffusion": [
|
||||
@ -8884,6 +8992,17 @@
|
||||
"title_aux": "ComfyUI-InstantMesh"
|
||||
}
|
||||
],
|
||||
"https://github.com/jtydhr88/ComfyUI-LayerDivider": [
|
||||
[
|
||||
"LayerDivider - Color Base",
|
||||
"LayerDivider - Divide Layer",
|
||||
"LayerDivider - Load SAM Mask Generator",
|
||||
"LayerDivider - Segment Mask"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI LayerDivider"
|
||||
}
|
||||
],
|
||||
"https://github.com/ka-puna/comfyui-yanc": [
|
||||
[
|
||||
"YANC.ConcatStrings",
|
||||
@ -8897,6 +9016,14 @@
|
||||
"title_aux": "comfyui-yanc"
|
||||
}
|
||||
],
|
||||
"https://github.com/kaanyalova/ComfyUI_ExtendedImageFormats": [
|
||||
[
|
||||
"ExtendedSaveImage"
|
||||
],
|
||||
{
|
||||
"title_aux": "Extended Image Formats for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/kadirnar/ComfyUI-Transformers": [
|
||||
[
|
||||
"DepthEstimationPipeline",
|
||||
@ -9022,6 +9149,14 @@
|
||||
"title_aux": "ComfyUI-text-file-util"
|
||||
}
|
||||
],
|
||||
"https://github.com/katalist-ai/comfyUI-nsfw-detection": [
|
||||
[
|
||||
"NudenetDetector"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyUI-nsfw-detection"
|
||||
}
|
||||
],
|
||||
"https://github.com/kealiu/ComfyUI-S3-Tools": [
|
||||
[
|
||||
"Load Image From S3",
|
||||
@ -9176,10 +9311,12 @@
|
||||
],
|
||||
"https://github.com/kijai/ComfyUI-IC-Light": [
|
||||
[
|
||||
"BackgroundScaler",
|
||||
"CalculateNormalsFromImages",
|
||||
"ICLightConditioning",
|
||||
"LightSource",
|
||||
"LoadAndApplyICLightUnet"
|
||||
"LoadAndApplyICLightUnet",
|
||||
"LoadHDRImage"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-IC-Light"
|
||||
@ -9213,6 +9350,7 @@
|
||||
"CreateGradientMask",
|
||||
"CreateInstanceDiffusionTracking",
|
||||
"CreateMagicMask",
|
||||
"CreateShapeImageOnPath",
|
||||
"CreateShapeMask",
|
||||
"CreateShapeMaskOnPath",
|
||||
"CreateTextMask",
|
||||
@ -9220,6 +9358,7 @@
|
||||
"CreateVoronoiMask",
|
||||
"CrossFadeImages",
|
||||
"CustomSigmas",
|
||||
"DownloadAndLoadCLIPSeg",
|
||||
"DrawInstanceDiffusionTracking",
|
||||
"DummyLatentOut",
|
||||
"EmptyLatentImagePresets",
|
||||
@ -9238,6 +9377,7 @@
|
||||
"GradientToFloat",
|
||||
"GrowMaskWithBlur",
|
||||
"INTConstant",
|
||||
"ImageAddMulti",
|
||||
"ImageAndMaskPreview",
|
||||
"ImageBatchMulti",
|
||||
"ImageBatchRepeatInterleaving",
|
||||
@ -9248,7 +9388,9 @@
|
||||
"ImageGridComposite3x3",
|
||||
"ImageNormalize_Neg1_To_1",
|
||||
"ImagePadForOutpaintMasked",
|
||||
"ImagePadForOutpaintTargetSize",
|
||||
"ImagePass",
|
||||
"ImageResizeKJ",
|
||||
"ImageTransformByNormalizedAmplitude",
|
||||
"ImageUpscaleWithModelBatched",
|
||||
"InjectNoiseToLatent",
|
||||
@ -9258,7 +9400,7 @@
|
||||
"Intrinsic_lora_sampling",
|
||||
"JoinStringMulti",
|
||||
"JoinStrings",
|
||||
"LoadICLightUnet",
|
||||
"LoadAndResizeImage",
|
||||
"LoadResAdapterNormalization",
|
||||
"MaskBatchMulti",
|
||||
"MaskOrImageToWeight",
|
||||
@ -9542,6 +9684,19 @@
|
||||
"title_aux": "cd-tuner_negpip-ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/laksjdjf/cgem156-ComfyUI": [
|
||||
[
|
||||
"GradualLatentSampler",
|
||||
"LCMSamplerRCFG",
|
||||
"LoadAestheticShadow",
|
||||
"PredictAesthetic",
|
||||
"TCDSampler",
|
||||
"TextScheduler"
|
||||
],
|
||||
{
|
||||
"title_aux": "cgem156-ComfyUI\ud83c\udf4c"
|
||||
}
|
||||
],
|
||||
"https://github.com/laksjdjf/pfg-ComfyUI": [
|
||||
[
|
||||
"PFG"
|
||||
@ -9592,6 +9747,14 @@
|
||||
"title_aux": "ComfyUI-Debug"
|
||||
}
|
||||
],
|
||||
"https://github.com/liusida/ComfyUI-Login": [
|
||||
[
|
||||
"LoadImageIncognito"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Login"
|
||||
}
|
||||
],
|
||||
"https://github.com/ljleb/comfy-mecha": [
|
||||
[
|
||||
"Blocks Mecha Hyper",
|
||||
@ -9756,6 +9919,15 @@
|
||||
"title_aux": "Wildcards"
|
||||
}
|
||||
],
|
||||
"https://github.com/lquesada/ComfyUI-Inpaint-CropAndStitch": [
|
||||
[
|
||||
"InpaintCrop",
|
||||
"InpaintStitch"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Inpaint-CropAndStitch"
|
||||
}
|
||||
],
|
||||
"https://github.com/lquesada/ComfyUI-Prompt-Combinator": [
|
||||
[
|
||||
"PromptCombinator",
|
||||
@ -10027,6 +10199,7 @@
|
||||
"PromptBuilder //Inspire",
|
||||
"PromptExtractor //Inspire",
|
||||
"RandomGeneratorForList //Inspire",
|
||||
"RandomNoise //Inspire",
|
||||
"RegionalConditioningColorMask //Inspire",
|
||||
"RegionalConditioningSimple //Inspire",
|
||||
"RegionalIPAdapterColorMask //Inspire",
|
||||
@ -10268,16 +10441,21 @@
|
||||
"PettyPaintComponent",
|
||||
"PettyPaintConditioningSetMaskAndCombine",
|
||||
"PettyPaintConvert",
|
||||
"PettyPaintCountFiles",
|
||||
"PettyPaintEnsureDirectory",
|
||||
"PettyPaintExec",
|
||||
"PettyPaintImageCompositeMasked",
|
||||
"PettyPaintImagePlacement",
|
||||
"PettyPaintImageSave",
|
||||
"PettyPaintImageStore",
|
||||
"PettyPaintImageToMask",
|
||||
"PettyPaintJsonMap",
|
||||
"PettyPaintJsonRead",
|
||||
"PettyPaintJsonReadArray",
|
||||
"PettyPaintLoadImage",
|
||||
"PettyPaintLoadImages",
|
||||
"PettyPaintMap",
|
||||
"PettyPaintProcessor",
|
||||
"PettyPaintRemoveAddText",
|
||||
"PettyPaintSDTurboScheduler",
|
||||
"PettyPaintText",
|
||||
@ -10480,11 +10658,14 @@
|
||||
[
|
||||
"DanbooruTagsTransformerBanTagsFromRegex",
|
||||
"DanbooruTagsTransformerComposePrompt",
|
||||
"DanbooruTagsTransformerComposePromptV2",
|
||||
"DanbooruTagsTransformerDecode",
|
||||
"DanbooruTagsTransformerDecodeBySplitedParts",
|
||||
"DanbooruTagsTransformerGenerate",
|
||||
"DanbooruTagsTransformerGenerateAdvanced",
|
||||
"DanbooruTagsTransformerGenerationConfig",
|
||||
"DanbooruTagsTransformerGetAspectRatio",
|
||||
"DanbooruTagsTransformerLoader",
|
||||
"DanbooruTagsTransformerRearrangedByAnimagine",
|
||||
"DanbooruTagsTransformerRemoveTagToken"
|
||||
],
|
||||
@ -10608,8 +10789,10 @@
|
||||
"BlendInpaint",
|
||||
"BrushNet",
|
||||
"BrushNetLoader",
|
||||
"CutForInpaint",
|
||||
"PowerPaint",
|
||||
"PowerPaintCLIPLoader"
|
||||
"PowerPaintCLIPLoader",
|
||||
"RAUNet"
|
||||
],
|
||||
{
|
||||
"author": "nullquant",
|
||||
@ -10729,6 +10912,18 @@
|
||||
"title_aux": "ComfyUI-TrollSuite"
|
||||
}
|
||||
],
|
||||
"https://github.com/oztrkoguz/ComfyUI_StoryCreator": [
|
||||
[
|
||||
"Kosmos2SamplerSimple2",
|
||||
"KosmosLoader2",
|
||||
"StoryLoader",
|
||||
"StorySamplerSimple",
|
||||
"Write2"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI StoryCreater"
|
||||
}
|
||||
],
|
||||
"https://github.com/palant/extended-saveimage-comfyui": [
|
||||
[
|
||||
"SaveImageExtended"
|
||||
@ -10933,7 +11128,7 @@
|
||||
],
|
||||
{
|
||||
"author": "receyuki",
|
||||
"description": "ComfyUI node version of the SD Prompt Reader",
|
||||
"description": "The ultimate solution for managing image metadata and multi-tool compatibility. ComfyUI node version of the SD Prompt Reader",
|
||||
"nickname": "SD Prompt Reader",
|
||||
"title": "SD Prompt Reader",
|
||||
"title_aux": "SD Prompt Reader"
|
||||
@ -10943,12 +11138,18 @@
|
||||
[
|
||||
"AvoidErasePrediction",
|
||||
"CFGPrediction",
|
||||
"CharacteristicGuidancePrediction",
|
||||
"CombinePredictions",
|
||||
"ConditionedPrediction",
|
||||
"EarlyMiddleLatePrediction",
|
||||
"InterpolatePredictions",
|
||||
"LogSigmas",
|
||||
"PerpNegPrediction",
|
||||
"SamplerCustomPrediction",
|
||||
"ScalePrediction",
|
||||
"ScaledGuidancePrediction",
|
||||
"SelectSigmas",
|
||||
"SplitAtSigma",
|
||||
"SwitchPredictions"
|
||||
],
|
||||
{
|
||||
@ -11039,6 +11240,15 @@
|
||||
"title_aux": "ComfyUI-Tara-LLM-Integration"
|
||||
}
|
||||
],
|
||||
"https://github.com/royceschultz/ComfyUI-Notifications": [
|
||||
[
|
||||
"Notif-PlaySound",
|
||||
"Notif-SystemNotification"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Notifications"
|
||||
}
|
||||
],
|
||||
"https://github.com/royceschultz/ComfyUI-TranscriptionTools": [
|
||||
[
|
||||
"TT-AudioSink",
|
||||
@ -11063,6 +11273,37 @@
|
||||
"title_aux": "RUI-Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/ruiqutech/ComfyUI-RuiquNodes": [
|
||||
[
|
||||
"EvaluateListMultiple1",
|
||||
"EvaluateListMultiple3",
|
||||
"EvaluateListMultiple6",
|
||||
"EvaluateListMultiple9",
|
||||
"EvaluateMultiple1",
|
||||
"EvaluateMultiple3",
|
||||
"EvaluateMultiple6",
|
||||
"EvaluateMultiple9",
|
||||
"ImageDilate",
|
||||
"ImageErode",
|
||||
"ListPath",
|
||||
"MaskDilate",
|
||||
"MaskErode",
|
||||
"PreviewMask",
|
||||
"RangeSplit",
|
||||
"SaveMask",
|
||||
"StringAsAny",
|
||||
"StringConcat1",
|
||||
"StringConcat3",
|
||||
"StringConcat6",
|
||||
"StringConcat9",
|
||||
"StringPathStem",
|
||||
"TermsToList",
|
||||
"VAEDecodeSave"
|
||||
],
|
||||
{
|
||||
"title_aux": "RuiquNodes for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/runtime44/comfyui_r44_nodes": [
|
||||
[
|
||||
"Runtime44ColorMatch",
|
||||
@ -11091,7 +11332,8 @@
|
||||
"https://github.com/saftle/suplex_comfy_nodes": [
|
||||
[
|
||||
"ControlNet Selector",
|
||||
"ControlNetOptionalLoader"
|
||||
"ControlNetOptionalLoader",
|
||||
"DiffusersSelector"
|
||||
],
|
||||
{
|
||||
"title_aux": "Suplex Misc ComfyUI Nodes"
|
||||
@ -11167,6 +11409,7 @@
|
||||
"ChatGPTOpenAI",
|
||||
"CkptNames_",
|
||||
"Color",
|
||||
"ComparingTwoFrames_",
|
||||
"CompositeImages_",
|
||||
"DynamicDelayProcessor",
|
||||
"EmbeddingPrompt",
|
||||
@ -11469,6 +11712,15 @@
|
||||
"title_aux": "ComfyUI_ChatGLM_API"
|
||||
}
|
||||
],
|
||||
"https://github.com/smthemex/ComfyUI_HiDiffusion_Pro": [
|
||||
[
|
||||
"Hidiffusion_Controlnet_Image",
|
||||
"Hidiffusion_Text2Image"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_HiDiffusion_Pro"
|
||||
}
|
||||
],
|
||||
"https://github.com/smthemex/ComfyUI_Llama3_8B": [
|
||||
[
|
||||
"ChatQA_1p5_8B",
|
||||
@ -11731,7 +11983,8 @@
|
||||
"https://github.com/sugarkwork/comfyui_tag_fillter": [
|
||||
[
|
||||
"TagFilter",
|
||||
"TagRemover"
|
||||
"TagRemover",
|
||||
"TagReplace"
|
||||
],
|
||||
{
|
||||
"title_aux": "comfyui_tag_filter"
|
||||
@ -11850,6 +12103,26 @@
|
||||
"title_aux": "ComfyUI Browser"
|
||||
}
|
||||
],
|
||||
"https://github.com/teward/ComfyUI-Helper-Nodes": [
|
||||
[
|
||||
"HelperNodes_CfgScale",
|
||||
"HelperNodes_CheckpointSelector",
|
||||
"HelperNodes_MultilineStringLiteral",
|
||||
"HelperNodes_Prompt",
|
||||
"HelperNodes_SDXLCommonResolutions",
|
||||
"HelperNodes_SamplerSelector",
|
||||
"HelperNodes_SaveImage",
|
||||
"HelperNodes_SchedulerSelector",
|
||||
"HelperNodes_SeedSelector",
|
||||
"HelperNodes_Steps",
|
||||
"HelperNodes_StringLiteral",
|
||||
"HelperNodes_VAESelector",
|
||||
"HelperNodes_WidthHeight"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Helper-Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/theUpsider/ComfyUI-Logic": [
|
||||
[
|
||||
"Bool",
|
||||
@ -12800,8 +13073,10 @@
|
||||
"ImageConcanateOfUtils",
|
||||
"IntAndIntAddOffsetLiteral",
|
||||
"IntMultipleAddLiteral",
|
||||
"LoadImageMaskWithSwitch",
|
||||
"LoadImageWithSwitch",
|
||||
"ModifyTextGender"
|
||||
"ModifyTextGender",
|
||||
"SplitMask"
|
||||
],
|
||||
{
|
||||
"title_aux": "zhangp365/Some Utils for ComfyUI"
|
||||
@ -12853,6 +13128,8 @@
|
||||
"https://github.com/zombieyang/sd-ppp": [
|
||||
[
|
||||
"Get Image From Photoshop Layer",
|
||||
"Image Times Opacity",
|
||||
"Mask Times Opacity",
|
||||
"Send Images To Photoshop"
|
||||
],
|
||||
{
|
||||
|
||||
@ -1,5 +1,36 @@
|
||||
{
|
||||
"models": [
|
||||
{
|
||||
"name": "IC-Light/fc",
|
||||
"type": "IC-Light",
|
||||
"base": "SD1.5",
|
||||
"save_path": "unet/IC-Light",
|
||||
"description": "The default relighting model, conditioned on text and foreground",
|
||||
"reference": "https://huggingface.co/lllyasviel/ic-light",
|
||||
"filename": "iclight_sd15_fc.safetensors",
|
||||
"url": "https://huggingface.co/lllyasviel/ic-light/resolve/main/iclight_sd15_fc.safetensors"
|
||||
},
|
||||
{
|
||||
"name": "IC-Light/fbc",
|
||||
"type": "IC-Light",
|
||||
"base": "SD1.5",
|
||||
"save_path": "unet/IC-Light",
|
||||
"description": "Relighting model conditioned with text, foreground, and background",
|
||||
"reference": "https://huggingface.co/lllyasviel/ic-light",
|
||||
"filename": "iclight_sd15_fbc.safetensors",
|
||||
"url": "https://huggingface.co/lllyasviel/ic-light/resolve/main/iclight_sd15_fbc.safetensors"
|
||||
},
|
||||
{
|
||||
"name": "IC-Light/fcon",
|
||||
"type": "IC-Light",
|
||||
"base": "SD1.5",
|
||||
"save_path": "unet/IC-Light",
|
||||
"description": "Same as iclight_sd15_fc.safetensors, but trained with offset noise",
|
||||
"reference": "https://huggingface.co/lllyasviel/ic-light",
|
||||
"filename": "iclight_sd15_fcon.safetensors",
|
||||
"url": "https://huggingface.co/lllyasviel/ic-light/resolve/main/iclight_sd15_fcon.safetensors"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "MonsterMMORPG/insightface (for InstantID)",
|
||||
"type": "insightface",
|
||||
@ -660,47 +691,6 @@
|
||||
"reference": "https://huggingface.co/Lightricks/LongAnimateDiff",
|
||||
"filename": "lt_long_mm_16_64_frames_v1.1.ckpt",
|
||||
"url": "https://huggingface.co/Lightricks/LongAnimateDiff/resolve/main/lt_long_mm_16_64_frames_v1.1.ckpt"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "animatediff/v3_sd15_sparsectrl_rgb.ckpt (ComfyUI-AnimateDiff-Evolved)",
|
||||
"type": "controlnet",
|
||||
"base": "SD1.x",
|
||||
"save_path": "controlnet/SD1.5/animatediff",
|
||||
"description": "AnimateDiff SparseCtrl RGB ControlNet model",
|
||||
"reference": "https://huggingface.co/guoyww/animatediff",
|
||||
"filename": "v3_sd15_sparsectrl_rgb.ckpt",
|
||||
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v3_sd15_sparsectrl_rgb.ckpt"
|
||||
},
|
||||
{
|
||||
"name": "animatediff/v3_sd15_sparsectrl_scribble.ckpt",
|
||||
"type": "controlnet",
|
||||
"base": "SD1.x",
|
||||
"save_path": "controlnet/SD1.5/animatediff",
|
||||
"description": "AnimateDiff SparseCtrl Scribble ControlNet model",
|
||||
"reference": "https://huggingface.co/guoyww/animatediff",
|
||||
"filename": "v3_sd15_sparsectrl_scribble.ckpt",
|
||||
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v3_sd15_sparsectrl_scribble.ckpt"
|
||||
},
|
||||
{
|
||||
"name": "animatediff/v3_sd15_mm.ckpt (ComfyUI-AnimateDiff-Evolved)",
|
||||
"type": "animatediff",
|
||||
"base": "SD1.x",
|
||||
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models",
|
||||
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
|
||||
"reference": "https://huggingface.co/guoyww/animatediff",
|
||||
"filename": "v3_sd15_mm.ckpt",
|
||||
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v3_sd15_mm.ckpt"
|
||||
},
|
||||
{
|
||||
"name": "animatediff/v3_sd15_adapter.ckpt",
|
||||
"type": "lora",
|
||||
"base": "SD1.x",
|
||||
"save_path": "loras/SD1.5/animatediff",
|
||||
"description": "AnimateDiff Adapter LoRA (SD1.5)",
|
||||
"reference": "https://huggingface.co/guoyww/animatediff",
|
||||
"filename": "v3_sd15_adapter.ckpt",
|
||||
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v3_sd15_adapter.ckpt"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@ -80,16 +80,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Tutorial nodes"
|
||||
},
|
||||
{
|
||||
"author": "GraftingRayman",
|
||||
"title": "ComfyUI-Trajectory",
|
||||
"reference": "https://github.com/GraftingRayman/ComfyUI-Trajectory",
|
||||
"files": [
|
||||
"https://github.com/GraftingRayman/ComfyUI-Trajectory"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:GR Trajectory"
|
||||
},
|
||||
{
|
||||
"author": "wailovet",
|
||||
"title": "ComfyUI-WW",
|
||||
@ -189,6 +179,16 @@
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom utility nodes for ComfyUI"
|
||||
},
|
||||
{
|
||||
"author": "nilor-corp",
|
||||
"title": "nilor-nodes",
|
||||
"reference": "https://github.com/nilor-corp/nilor-nodes",
|
||||
"files": [
|
||||
"https://github.com/nilor-corp/nilor-nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:Nilor Floats, Nilor Int To List Of Bools, Nilor Bool From List Of Bools, Nilor Int From List Of Ints, Nilor List of Ints, Nilor Count Images In Directory"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -2,4 +2,7 @@ GitPython
|
||||
PyGithub
|
||||
matrix-client==0.4.0
|
||||
transformers
|
||||
huggingface-hub>0.20
|
||||
huggingface-hub>0.20
|
||||
typer
|
||||
rich
|
||||
typing-extensions
|
||||
44
scanner.py
44
scanner.py
@ -39,6 +39,7 @@ print(f"TEMP DIR: {temp_dir}")
|
||||
|
||||
parse_cnt = 0
|
||||
|
||||
|
||||
def extract_nodes(code_text):
|
||||
global parse_cnt
|
||||
|
||||
@ -290,22 +291,31 @@ def update_custom_nodes():
|
||||
repo = g.get_repo(owner_repo)
|
||||
|
||||
last_update = repo.pushed_at.strftime("%Y-%m-%d %H:%M:%S") if repo.pushed_at else 'N/A'
|
||||
github_stats[url] = {
|
||||
item = {
|
||||
"stars": repo.stargazers_count,
|
||||
"last_update": last_update,
|
||||
"cached_time": datetime.datetime.now().timestamp(),
|
||||
}
|
||||
with open(GITHUB_STATS_CACHE_FILENAME, 'w', encoding='utf-8') as file:
|
||||
json.dump(github_stats, file, ensure_ascii=False, indent=4)
|
||||
return url, item
|
||||
else:
|
||||
print(f"\nInvalid URL format for GitHub repository: {url}\n")
|
||||
except Exception as e:
|
||||
print(f"\nERROR on {url}\n{e}")
|
||||
|
||||
return None
|
||||
|
||||
# resolve unresolved urls
|
||||
for url, title, preemptions, node_pattern in git_url_titles_preemptions:
|
||||
if url not in github_stats:
|
||||
renew_stat(url)
|
||||
with concurrent.futures.ThreadPoolExecutor(11) as executor:
|
||||
futures = []
|
||||
for url, title, preemptions, node_pattern in git_url_titles_preemptions:
|
||||
if url not in github_stats:
|
||||
futures.append(executor.submit(renew_stat, url))
|
||||
|
||||
for future in concurrent.futures.as_completed(futures):
|
||||
url_item = future.result()
|
||||
if url_item is not None:
|
||||
url, item = url_item
|
||||
github_stats[url] = item
|
||||
|
||||
# renew outdated cache
|
||||
outdated_urls = []
|
||||
@ -314,8 +324,18 @@ def update_custom_nodes():
|
||||
if elapsed > 60*60*12: # 12 hours
|
||||
outdated_urls.append(k)
|
||||
|
||||
for url in outdated_urls:
|
||||
renew_stat(url)
|
||||
with concurrent.futures.ThreadPoolExecutor(11) as executor:
|
||||
for url in outdated_urls:
|
||||
futures.append(executor.submit(renew_stat, url))
|
||||
|
||||
for future in concurrent.futures.as_completed(futures):
|
||||
url_item = future.result()
|
||||
if url_item is not None:
|
||||
url, item = url_item
|
||||
github_stats[url] = item
|
||||
|
||||
with open('github-stats-cache.json', 'w', encoding='utf-8') as file:
|
||||
json.dump(github_stats, file, ensure_ascii=False, indent=4)
|
||||
|
||||
with open(GITHUB_STATS_FILENAME, 'w', encoding='utf-8') as file:
|
||||
for v in github_stats.values():
|
||||
@ -325,11 +345,11 @@ def update_custom_nodes():
|
||||
json.dump(github_stats, file, ensure_ascii=False, indent=4)
|
||||
|
||||
print(f"Successfully written to {GITHUB_STATS_FILENAME}.")
|
||||
|
||||
with concurrent.futures.ThreadPoolExecutor(11) as executor:
|
||||
if not skip_stat_update:
|
||||
executor.submit(process_git_stats, git_url_titles_preemptions) # One single thread for `process_git_stats()`. Runs concurrently with `process_git_url_title()`.
|
||||
|
||||
if not skip_stat_update:
|
||||
process_git_stats(git_url_titles_preemptions)
|
||||
|
||||
with concurrent.futures.ThreadPoolExecutor(11) as executor:
|
||||
for url, title, preemptions, node_pattern in git_url_titles_preemptions:
|
||||
executor.submit(process_git_url_title, url, title, preemptions, node_pattern)
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user