diff --git a/Reverse_Prompt_Node.py b/ReversePromptNode.py similarity index 52% rename from Reverse_Prompt_Node.py rename to ReversePromptNode.py index 6f71b33..1254b20 100644 --- a/Reverse_Prompt_Node.py +++ b/ReversePromptNode.py @@ -1,6 +1,6 @@ import os import json -import folder_paths +import hashlib class ReversePromptNode: def __init__(self): @@ -12,16 +12,21 @@ class ReversePromptNode: curr_dir = os.path.dirname(os.path.realpath(__file__)) presets_dir = os.path.join(curr_dir, "presets") - # 如果目录不存在,创建一个(防止报错) + # 自动创建目录 if not os.path.exists(presets_dir): - os.makedirs(presets_dir) + try: + os.makedirs(presets_dir) + except: + pass # 扫描 .json 文件 - files = [f for f in os.listdir(presets_dir) if f.endswith(".json")] + files = [] + if os.path.exists(presets_dir): + files = [f for f in os.listdir(presets_dir) if f.endswith(".json")] - # 如果没有文件,提供一个占位符 + # 防止列表为空导致的前端错误 if not files: - files = ["put_json_in_presets_folder.json"] + files = ["No_json_files_found"] return { "required": { @@ -33,9 +38,24 @@ class ReversePromptNode: RETURN_TYPES = ("STRING",) RETURN_NAMES = ("json_string",) FUNCTION = "load_json_preset" - CATEGORY = "ChiefAI/Utils" # 你可以根据喜好修改类别 + CATEGORY = "ChiefAI/Utils" + + # 核心修复:添加 IS_CHANGED 逻辑 + # 这告诉 ComfyUI:如果不返回 NaN,则每次运行都检查文件内容是否有变化 + # 这里我们返回文件的修改时间或哈希,确保修改 json 内容后能生效 + @classmethod + def IS_CHANGED(s, preset_file, stringify_mode): + curr_dir = os.path.dirname(os.path.realpath(__file__)) + file_path = os.path.join(curr_dir, "presets", preset_file) + if os.path.exists(file_path): + mtime = os.path.getmtime(file_path) + return f"{preset_file}_{mtime}_{stringify_mode}" + return float("NaN") def load_json_preset(self, preset_file, stringify_mode): + if preset_file == "No_json_files_found": + return (json.dumps({"error": "No JSON files found in presets folder"}),) + curr_dir = os.path.dirname(os.path.realpath(__file__)) file_path = os.path.join(curr_dir, "presets", preset_file) @@ -46,19 +66,16 @@ class ReversePromptNode: raise FileNotFoundError(f"File not found: {file_path}") with open(file_path, 'r', encoding='utf-8') as f: - # 先解析一次以确保它是有效的JSON data = json.load(f) - # 根据用户选择输出格式化后的文本 if stringify_mode == "Minified (One Line)": - # 压缩成一行,去除空格 json_content = json.dumps(data, ensure_ascii=False) else: - # 保持缩进的可读格式 json_content = json.dumps(data, indent=4, ensure_ascii=False) except Exception as e: - print(f"[ReversePromptNode] Error: {e}") - json_content = json.dumps({"error": str(e)}) + print(f"[ReversePromptNode] Error loading {preset_file}: {e}") + # 返回错误信息但保持 JSON 格式,防止工作流崩溃 + json_content = json.dumps({"error_loading_file": str(e)}) return (json_content,)