From 61514612f8431456dae837ea91f63fc16fb1fc3d Mon Sep 17 00:00:00 2001 From: "Dr.Lt.Data" Date: Fri, 8 Dec 2023 16:09:13 +0900 Subject: [PATCH] improve: badge update scanner --- __init__.py | 20 ++++- custom-node-list.json | 2 +- extension-node-map.json | 111 +++++++++++++++++++++------- js/comfyui-manager.js | 11 ++- node_db/dev/custom-node-list.json | 20 +++++ node_db/new/extension-node-map.json | 111 +++++++++++++++++++++------- scanner.py | 40 +++++----- 7 files changed, 243 insertions(+), 72 deletions(-) diff --git a/__init__.py b/__init__.py index 79919b8..d4e56b8 100644 --- a/__init__.py +++ b/__init__.py @@ -16,8 +16,9 @@ from urllib.parse import urlparse import http.client import re import signal +import nodes -version = "V1.8.3" +version = "V1.9" print(f"### Loading: ComfyUI-Manager ({version})") required_comfyui_revision = 1793 @@ -614,8 +615,23 @@ async def fetch_customnode_mappings(request): uri = local_db_extension_node_mappings else: uri = get_config()['channel_url'] + '/extension-node-map.json' - + json_obj = await get_data(uri) + + all_nodes = set() + patterns = [] + for k, x in json_obj.items(): + all_nodes.update(set(x[0])) + + if 'nodename_pattern' in x[1]: + patterns.append((x[1]['nodename_pattern'], x[0])) + + missing_nodes = set(nodes.NODE_CLASS_MAPPINGS.keys()) - all_nodes + + for x in missing_nodes: + for pat, item in patterns: + if re.match(pat, x): + item.append(x) return web.json_response(json_obj, content_type='application/json') diff --git a/custom-node-list.json b/custom-node-list.json index c487e77..af1946a 100644 --- a/custom-node-list.json +++ b/custom-node-list.json @@ -2113,7 +2113,7 @@ "https://github.com/chrisgoringe/cg-use-everywhere" ], "install_type": "git-clone", - "nodename_pattern": "^(UE\\? |UE )", + "nodename_pattern": "(^(Prompts|Anything) Everywhere|Simple String)", "description": "A set of nodes that allow data to be 'broadcast' to some or all unconnected inputs. Greatly reduces link spaghetti." }, { diff --git a/extension-node-map.json b/extension-node-map.json index 37425ec..8ae906e 100644 --- a/extension-node-map.json +++ b/extension-node-map.json @@ -94,6 +94,16 @@ "title_aux": "ComfyUI Nodes for External Tooling" } ], + "https://github.com/Amorano/Jovimetrix": [ + [], + { + "author": "amorano", + "description": "Procedural & Compositing. Includes a Webcam node.", + "nodename_pattern": " \\(jov\\)$", + "title": "Jovimetrix Composition Pack", + "title_aux": "Jovimetrix Composition Nodes" + } + ], "https://github.com/ArtBot2023/CharacterFaceSwap": [ [ "Color Blend", @@ -130,7 +140,8 @@ [ "LogSigmas", "SpliceDenoised", - "SpliceLatents" + "SpliceLatents", + "TemporalSplice" ], { "title_aux": "SpliceTools" @@ -546,6 +557,13 @@ "title_aux": "ComfyUI's ControlNet Auxiliary Preprocessors" } ], + "https://github.com/Feidorian/feidorian-ComfyNodes": [ + [], + { + "nodename_pattern": "^Feidorian_", + "title_aux": "feidorian-ComfyNodes" + } + ], "https://github.com/Fictiverse/ComfyUI_Fictiverse": [ [ "Add Noise to Image with Mask", @@ -652,11 +670,12 @@ ], "https://github.com/Haoming02/comfyui-diffusion-cg": [ [ - "Center Sampler", - "Center Sampler XL", + "Hook Recenter", + "Hook Recenter XL", "Normalization", "NormalizationXL", - "Tensor Debug" + "Tensor Debug", + "Unhook Recenter" ], { "title_aux": "ComfyUI Diffusion Color Grading" @@ -1104,7 +1123,9 @@ ], "https://github.com/Off-Live/ComfyUI-off-suite": [ [ + "Cached Image Load From URL", "Crop Center wigh SEGS", + "Crop Center with SEGS", "GW Number Formatting", "Image Crop Fit", "Image Resize Fit", @@ -1704,6 +1725,7 @@ "author": "tinyterra", "description": "This extension offers various pipe nodes, fullscreen image viewer based on node history, dynamic widgets, interface customization, and more.", "nickname": "ttNodes", + "nodename_pattern": "^ttN ", "title": "tinyterraNodes", "title_aux": "tinyterraNodes" } @@ -2707,7 +2729,8 @@ ], "https://github.com/chflame163/ComfyUI_MSSpeech_TTS": [ [ - "MicorsoftSpeech_TTS" + "MicorsoftSpeech_TTS", + "Play Sound" ], { "title_aux": "ComfyUI_MSSpeech_TTS" @@ -2766,6 +2789,7 @@ "Seed Everywhere" ], { + "nodename_pattern": "(^(Prompts|Anything) Everywhere|Simple String)", "title_aux": "Use Everywhere (UE Nodes)" } ], @@ -3089,12 +3113,12 @@ "title_aux": "KSampler GPU" } ], - "https://github.com/daxthin/facedetailer": [ + "https://github.com/daxthin/DZ-FaceDetailer": [ [ "DZ_Face_Detailer" ], { - "title_aux": "facedetailer" + "title_aux": "DZ-FaceDetailer" } ], "https://github.com/dimtoneff/ComfyUI-PixelArt-Detector": [ @@ -3246,6 +3270,14 @@ "title_aux": "Pixelization" } ], + "https://github.com/filliptm/ComfyUI_Fill-Nodes": [ + [ + "FL_ImageRandomizer" + ], + { + "title_aux": "ComfyUI_Fill-Nodes" + } + ], "https://github.com/fitCorder/fcSuite/raw/main/fcSuite.py": [ [ "fcFloat", @@ -3534,6 +3566,13 @@ "title_aux": "Efficiency Nodes for ComfyUI Version 2.0+" } ], + "https://github.com/jamesWalker55/comfyui-various": [ + [], + { + "nodename_pattern": "^JW", + "title_aux": "Various ComfyUI Nodes by Type" + } + ], "https://github.com/jjkramhoeft/ComfyUI-Jjk-Nodes": [ [ "JjkConcat", @@ -3555,6 +3594,22 @@ "title_aux": "ComfyUI-sampler-lcm-alternative" } ], + "https://github.com/jtrue/ComfyUI-JaRue": [ + [ + "ConcatStringWithDelimiter_jru", + "ConcatString_jru", + "Float2Int_jru", + "Float2String_jru", + "ImageSizer_jru", + "Int2FloatMultiply_jru", + "Int2String_jru", + "String2Int_jru", + "YouTube2Prompt_jru" + ], + { + "title_aux": "ComfyUI-JaRue" + } + ], "https://github.com/ka-puna/comfyui-yanc": [ [ "YANC.ConcatStrings", @@ -3677,7 +3732,9 @@ ], "https://github.com/knuknX/ComfyUI-Image-Tools": [ [ - "BatchImageResizeProcessor", + "ImageBatchSqueezeProcessor", + "ImageBgRemoveProcessor", + "ImageStandardResizeProcessor", "SingleImagePathLoader", "SingleImageUrlLoader" ], @@ -4022,6 +4079,7 @@ "author": "Dr.Lt.Data", "description": "This extension provides various nodes to support Lora Block Weight and the Impact Pack.", "nickname": "Inspire Pack", + "nodename_pattern": "Inspire$", "title": "Inspire Pack", "title_aux": "ComfyUI Inspire Pack" } @@ -4174,6 +4232,7 @@ "Vae Decode (mtb)" ], { + "nodename_pattern": "\\(mtb\\)$", "title_aux": "MTB Nodes" } ], @@ -4363,6 +4422,7 @@ "Text Box - Ostris" ], { + "nodename_pattern": "- Ostris$", "title_aux": "Ostris Nodes ComfyUI" } ], @@ -4415,23 +4475,7 @@ ], "https://github.com/peteromallet/ComfyUI-Creative-Interpolation": [ [ - "ACN_AdvancedControlNetApplyImport", - "BatchCreativeInterpolation", - "ControlNetLoaderAdvancedImport", - "CustomControlNetWeights", - "CustomT2IAdapterWeights", - "DiffControlNetLoaderAdvancedImport", - "FILMVFIImport", - "LatentKeyframeBatchedGroupImport", - "LatentKeyframeGroupImport", - "LatentKeyframeImport", - "LatentKeyframeTiming", - "LoadImagesFromDirectory", - "MaskGenerator", - "ScaledSoftControlNetWeightsImport", - "SoftControlNetWeights", - "SoftT2IAdapterWeights", - "TimestepKeyframe" + "BatchCreativeInterpolation" ], { "title_aux": "ComfyUI-Creative-Interpolation [Beta]" @@ -4506,6 +4550,17 @@ "title_aux": "comfyui-prompt-reader-node" } ], + "https://github.com/rgthree/rgthree-comfy": [ + [], + { + "author": "rgthree", + "description": "A bunch of nodes I created that I also find useful.", + "nickname": "rgthree", + "nodename_pattern": " \\(rgthree\\)$", + "title": "Comfy Nodes", + "title_aux": "rgthree's ComfyUi Nodes" + } + ], "https://github.com/richinsley/Comfy-LFO": [ [ "LFO_Pulse", @@ -4583,6 +4638,7 @@ "ChatGPTOpenAI", "CombineMasks_", "CombineSegMasks", + "EditLayer", "EmptyLayer", "EnhanceImage", "FaceToMask", @@ -4597,6 +4653,8 @@ "ShowTextForGPT", "SmoothMask", "SplitLongMask", + "SvgImage", + "TextImage", "TransparentImage", "VAEDecodeConsistencyDecoder", "VAELoaderConsistencyDecoder" @@ -4906,6 +4964,7 @@ "ImageShuffle", "LCMGenerate", "LCMGenerate_ReferenceOnly", + "LCMGenerate_SDTurbo", "LCMGenerate_img2img", "LCMGenerate_img2img_IPAdapter", "LCMGenerate_img2img_controlnet", @@ -4914,6 +4973,7 @@ "LCMLoader", "LCMLoader_RefInpaint", "LCMLoader_ReferenceOnly", + "LCMLoader_SDTurbo", "LCMLoader_controlnet", "LCMLoader_controlnet_inpaint", "LCMLoader_img2img", @@ -5017,6 +5077,7 @@ "Random Line 4" ], { + "nodename_pattern": "\\(mtb\\)$", "title_aux": "Hakkun-ComfyUI-nodes" } ], diff --git a/js/comfyui-manager.js b/js/comfyui-manager.js index 74605ee..cce1c07 100644 --- a/js/comfyui-manager.js +++ b/js/comfyui-manager.js @@ -230,6 +230,7 @@ async function fetchNicknames() { const mappings = await response1.json(); let result = {}; + let nickname_patterns = []; for (let i in mappings) { let item = mappings[i]; @@ -244,12 +245,16 @@ async function fetchNicknames() { for (let j in item[0]) { result[item[0][j]] = nickname; } + + if(item[1].nodename_pattern) { + nickname_patterns.push([item[1].nodename_pattern, nickname]); + } } - return result; + return [result, nickname_patterns]; } -let nicknames = await fetchNicknames(); +const [nicknames, nickname_patterns] = await fetchNicknames(); async function updateComfyUI() { @@ -917,7 +922,9 @@ app.registerExtension({ this._addExtraNodeContextMenu(nodeType, app); }, + async nodeCreated(node, app) { + }, async loadedGraphNode(node, app) { if (node.has_errors) { const onDrawForeground = node.onDrawForeground; diff --git a/node_db/dev/custom-node-list.json b/node_db/dev/custom-node-list.json index fa67bb8..a11499b 100644 --- a/node_db/dev/custom-node-list.json +++ b/node_db/dev/custom-node-list.json @@ -1,5 +1,25 @@ { "custom_nodes": [ + { + "author": "talesofai", + "title": "comfyui-supersave [WIP]", + "reference": "https://github.com/talesofai/comfyui-supersave", + "files": [ + "https://github.com/talesofai/comfyui-supersave" + ], + "install_type": "git-clone", + "description": "WIP" + }, + { + "author": "Sai-ComfyUI", + "title": "ComfyUI-MS-Nodes [WIP]", + "reference": "https://github.com/Sai-ComfyUI/ComfyUI-MS-Nodes", + "files": [ + "https://github.com/Sai-ComfyUI/ComfyUI-MS-Nodes" + ], + "install_type": "git-clone", + "description": "WIP" + }, { "author": "eigenpunk", "title": "ComfyUI-audio", diff --git a/node_db/new/extension-node-map.json b/node_db/new/extension-node-map.json index 37425ec..8ae906e 100644 --- a/node_db/new/extension-node-map.json +++ b/node_db/new/extension-node-map.json @@ -94,6 +94,16 @@ "title_aux": "ComfyUI Nodes for External Tooling" } ], + "https://github.com/Amorano/Jovimetrix": [ + [], + { + "author": "amorano", + "description": "Procedural & Compositing. Includes a Webcam node.", + "nodename_pattern": " \\(jov\\)$", + "title": "Jovimetrix Composition Pack", + "title_aux": "Jovimetrix Composition Nodes" + } + ], "https://github.com/ArtBot2023/CharacterFaceSwap": [ [ "Color Blend", @@ -130,7 +140,8 @@ [ "LogSigmas", "SpliceDenoised", - "SpliceLatents" + "SpliceLatents", + "TemporalSplice" ], { "title_aux": "SpliceTools" @@ -546,6 +557,13 @@ "title_aux": "ComfyUI's ControlNet Auxiliary Preprocessors" } ], + "https://github.com/Feidorian/feidorian-ComfyNodes": [ + [], + { + "nodename_pattern": "^Feidorian_", + "title_aux": "feidorian-ComfyNodes" + } + ], "https://github.com/Fictiverse/ComfyUI_Fictiverse": [ [ "Add Noise to Image with Mask", @@ -652,11 +670,12 @@ ], "https://github.com/Haoming02/comfyui-diffusion-cg": [ [ - "Center Sampler", - "Center Sampler XL", + "Hook Recenter", + "Hook Recenter XL", "Normalization", "NormalizationXL", - "Tensor Debug" + "Tensor Debug", + "Unhook Recenter" ], { "title_aux": "ComfyUI Diffusion Color Grading" @@ -1104,7 +1123,9 @@ ], "https://github.com/Off-Live/ComfyUI-off-suite": [ [ + "Cached Image Load From URL", "Crop Center wigh SEGS", + "Crop Center with SEGS", "GW Number Formatting", "Image Crop Fit", "Image Resize Fit", @@ -1704,6 +1725,7 @@ "author": "tinyterra", "description": "This extension offers various pipe nodes, fullscreen image viewer based on node history, dynamic widgets, interface customization, and more.", "nickname": "ttNodes", + "nodename_pattern": "^ttN ", "title": "tinyterraNodes", "title_aux": "tinyterraNodes" } @@ -2707,7 +2729,8 @@ ], "https://github.com/chflame163/ComfyUI_MSSpeech_TTS": [ [ - "MicorsoftSpeech_TTS" + "MicorsoftSpeech_TTS", + "Play Sound" ], { "title_aux": "ComfyUI_MSSpeech_TTS" @@ -2766,6 +2789,7 @@ "Seed Everywhere" ], { + "nodename_pattern": "(^(Prompts|Anything) Everywhere|Simple String)", "title_aux": "Use Everywhere (UE Nodes)" } ], @@ -3089,12 +3113,12 @@ "title_aux": "KSampler GPU" } ], - "https://github.com/daxthin/facedetailer": [ + "https://github.com/daxthin/DZ-FaceDetailer": [ [ "DZ_Face_Detailer" ], { - "title_aux": "facedetailer" + "title_aux": "DZ-FaceDetailer" } ], "https://github.com/dimtoneff/ComfyUI-PixelArt-Detector": [ @@ -3246,6 +3270,14 @@ "title_aux": "Pixelization" } ], + "https://github.com/filliptm/ComfyUI_Fill-Nodes": [ + [ + "FL_ImageRandomizer" + ], + { + "title_aux": "ComfyUI_Fill-Nodes" + } + ], "https://github.com/fitCorder/fcSuite/raw/main/fcSuite.py": [ [ "fcFloat", @@ -3534,6 +3566,13 @@ "title_aux": "Efficiency Nodes for ComfyUI Version 2.0+" } ], + "https://github.com/jamesWalker55/comfyui-various": [ + [], + { + "nodename_pattern": "^JW", + "title_aux": "Various ComfyUI Nodes by Type" + } + ], "https://github.com/jjkramhoeft/ComfyUI-Jjk-Nodes": [ [ "JjkConcat", @@ -3555,6 +3594,22 @@ "title_aux": "ComfyUI-sampler-lcm-alternative" } ], + "https://github.com/jtrue/ComfyUI-JaRue": [ + [ + "ConcatStringWithDelimiter_jru", + "ConcatString_jru", + "Float2Int_jru", + "Float2String_jru", + "ImageSizer_jru", + "Int2FloatMultiply_jru", + "Int2String_jru", + "String2Int_jru", + "YouTube2Prompt_jru" + ], + { + "title_aux": "ComfyUI-JaRue" + } + ], "https://github.com/ka-puna/comfyui-yanc": [ [ "YANC.ConcatStrings", @@ -3677,7 +3732,9 @@ ], "https://github.com/knuknX/ComfyUI-Image-Tools": [ [ - "BatchImageResizeProcessor", + "ImageBatchSqueezeProcessor", + "ImageBgRemoveProcessor", + "ImageStandardResizeProcessor", "SingleImagePathLoader", "SingleImageUrlLoader" ], @@ -4022,6 +4079,7 @@ "author": "Dr.Lt.Data", "description": "This extension provides various nodes to support Lora Block Weight and the Impact Pack.", "nickname": "Inspire Pack", + "nodename_pattern": "Inspire$", "title": "Inspire Pack", "title_aux": "ComfyUI Inspire Pack" } @@ -4174,6 +4232,7 @@ "Vae Decode (mtb)" ], { + "nodename_pattern": "\\(mtb\\)$", "title_aux": "MTB Nodes" } ], @@ -4363,6 +4422,7 @@ "Text Box - Ostris" ], { + "nodename_pattern": "- Ostris$", "title_aux": "Ostris Nodes ComfyUI" } ], @@ -4415,23 +4475,7 @@ ], "https://github.com/peteromallet/ComfyUI-Creative-Interpolation": [ [ - "ACN_AdvancedControlNetApplyImport", - "BatchCreativeInterpolation", - "ControlNetLoaderAdvancedImport", - "CustomControlNetWeights", - "CustomT2IAdapterWeights", - "DiffControlNetLoaderAdvancedImport", - "FILMVFIImport", - "LatentKeyframeBatchedGroupImport", - "LatentKeyframeGroupImport", - "LatentKeyframeImport", - "LatentKeyframeTiming", - "LoadImagesFromDirectory", - "MaskGenerator", - "ScaledSoftControlNetWeightsImport", - "SoftControlNetWeights", - "SoftT2IAdapterWeights", - "TimestepKeyframe" + "BatchCreativeInterpolation" ], { "title_aux": "ComfyUI-Creative-Interpolation [Beta]" @@ -4506,6 +4550,17 @@ "title_aux": "comfyui-prompt-reader-node" } ], + "https://github.com/rgthree/rgthree-comfy": [ + [], + { + "author": "rgthree", + "description": "A bunch of nodes I created that I also find useful.", + "nickname": "rgthree", + "nodename_pattern": " \\(rgthree\\)$", + "title": "Comfy Nodes", + "title_aux": "rgthree's ComfyUi Nodes" + } + ], "https://github.com/richinsley/Comfy-LFO": [ [ "LFO_Pulse", @@ -4583,6 +4638,7 @@ "ChatGPTOpenAI", "CombineMasks_", "CombineSegMasks", + "EditLayer", "EmptyLayer", "EnhanceImage", "FaceToMask", @@ -4597,6 +4653,8 @@ "ShowTextForGPT", "SmoothMask", "SplitLongMask", + "SvgImage", + "TextImage", "TransparentImage", "VAEDecodeConsistencyDecoder", "VAELoaderConsistencyDecoder" @@ -4906,6 +4964,7 @@ "ImageShuffle", "LCMGenerate", "LCMGenerate_ReferenceOnly", + "LCMGenerate_SDTurbo", "LCMGenerate_img2img", "LCMGenerate_img2img_IPAdapter", "LCMGenerate_img2img_controlnet", @@ -4914,6 +4973,7 @@ "LCMLoader", "LCMLoader_RefInpaint", "LCMLoader_ReferenceOnly", + "LCMLoader_SDTurbo", "LCMLoader_controlnet", "LCMLoader_controlnet_inpaint", "LCMLoader_img2img", @@ -5017,6 +5077,7 @@ "Random Line 4" ], { + "nodename_pattern": "\\(mtb\\)$", "title_aux": "Hakkun-ComfyUI-nodes" } ], diff --git a/scanner.py b/scanner.py index 8ac6a92..9c93041 100644 --- a/scanner.py +++ b/scanner.py @@ -119,9 +119,9 @@ def get_git_urls_from_json(json_file): if node.get('install_type') == 'git-clone': files = node.get('files', []) if files: - git_clone_files.append((files[0], node.get('title'))) + git_clone_files.append((files[0], node.get('title'), node.get('nodename_pattern'))) - git_clone_files.append(("https://github.com/comfyanonymous/ComfyUI", "ComfyUI")) + git_clone_files.append(("https://github.com/comfyanonymous/ComfyUI", "ComfyUI", None)) return git_clone_files @@ -136,7 +136,7 @@ def get_py_urls_from_json(json_file): if node.get('install_type') == 'copy': files = node.get('files', []) if files: - py_files.append((files[0],node.get('title'))) + py_files.append((files[0], node.get('title'), node.get('nodename_pattern'))) return py_files @@ -171,25 +171,25 @@ def update_custom_nodes(): git_url_titles = get_git_urls_from_json('custom-node-list.json') - def process_git_url_title(url, title): + def process_git_url_title(url, title, node_pattern): name = os.path.basename(url) if name.endswith(".git"): name = name[:-4] - node_info[name] = (url, title) + node_info[name] = (url, title, node_pattern) clone_or_pull_git_repository(url) with concurrent.futures.ThreadPoolExecutor(10) as executor: - for url, title in git_url_titles: - executor.submit(process_git_url_title, url, title) + for url, title, node_pattern in git_url_titles: + executor.submit(process_git_url_title, url, title, node_pattern) - py_url_titles = get_py_urls_from_json('custom-node-list.json') + py_url_titles_and_pattern = get_py_urls_from_json('custom-node-list.json') - def download_and_store_info(url_title): - url, title = url_title + def download_and_store_info(url_title_and_pattern): + url, title, node_pattern = url_title_and_pattern name = os.path.basename(url) if name.endswith(".py"): - node_info[name] = (url, title) + node_info[name] = (url, title, node_pattern) try: download_url(url, ".tmp") @@ -197,7 +197,7 @@ def update_custom_nodes(): print(f"[ERROR] Cannot download '{url}'") with concurrent.futures.ThreadPoolExecutor(10) as executor: - executor.map(download_and_store_info, py_url_titles) + executor.map(download_and_store_info, py_url_titles_and_pattern) return node_info @@ -223,13 +223,15 @@ def gen_json(node_info): dirname = os.path.basename(dirname) - if len(nodes) > 0: + if len(nodes) > 0 or (dirname in node_info and node_info[dirname][2] is not None): nodes = list(nodes) nodes.sort() if dirname in node_info: - git_url, title = node_info[dirname] + git_url, title, node_pattern = node_info[dirname] metadata['title_aux'] = title + if node_pattern is not None: + metadata['nodename_pattern'] = node_pattern data[git_url] = (nodes, metadata) else: print(f"WARN: {dirname} is removed from custom-node-list.json") @@ -237,15 +239,17 @@ def gen_json(node_info): for file in node_files: nodes, metadata = scan_in_file(file) - if len(nodes) > 0: + if len(nodes) > 0 or (dirname in node_info and node_info[dirname][2] is not None): nodes = list(nodes) nodes.sort() file = os.path.basename(file) if file in node_info: - url, title = node_info[file] + url, title, node_pattern = node_info[file] metadata['title_aux'] = title + if node_pattern is not None: + metadata['nodename_pattern'] = node_pattern data[url] = (nodes, metadata) else: print(f"Missing info: {url}") @@ -256,7 +260,7 @@ def gen_json(node_info): for extension in extensions: node_list_json_path = os.path.join('.tmp', extension, 'node_list.json') if os.path.exists(node_list_json_path): - git_url, title = node_info[extension] + git_url, title, node_pattern = node_info[extension] with open(node_list_json_path, 'r', encoding='utf-8') as f: node_list_json = json.load(f) @@ -272,6 +276,8 @@ def gen_json(node_info): nodes.add(x.strip()) metadata_in_url['title_aux'] = title + if node_pattern is not None: + metadata['nodename_pattern'] = node_pattern nodes = list(nodes) nodes.sort() data[git_url] = (nodes, metadata_in_url)