From 557d79c173b9897b7941af2c86525ce00f07bea1 Mon Sep 17 00:00:00 2001 From: Vito Sansevero Date: Tue, 3 Feb 2026 08:39:22 -0800 Subject: [PATCH 1/2] fix: restore IS_CHANGED to enable proper branch execution Fixes #94 The removal of IS_CHANGED in PR #91 caused ComfyUI to always re-execute the entire graph instead of only changed branches. IS_CHANGED returns a hash of text inputs (text, prepend_text, append_text) - when unchanged, ComfyUI skips re-execution. --- prompt_manager.py | 19 ++++++++++++++++--- prompt_manager_text.py | 19 ++++++++++++++++--- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/prompt_manager.py b/prompt_manager.py index 26f5473..f3432df 100644 --- a/prompt_manager.py +++ b/prompt_manager.py @@ -492,6 +492,19 @@ class PromptManager(ComfyNodeABC): """ self.cleanup_gallery_system() - # NOTE: IS_CHANGED intentionally removed to match CLIPTextEncode behavior - # ComfyUI's default caching (based on input values) should handle cache invalidation - # The previous IS_CHANGED implementation was causing input/cache mismatch issues + @classmethod + def IS_CHANGED(cls, clip, text="", category="", tags="", search_text="", + prepend_text="", append_text="", **kwargs): + """ + ComfyUI method to determine if node needs re-execution. + + Returns a hash of input values that affect the conditioning output. + This enables proper branch execution - only re-execute when inputs change. + """ + import hashlib + + # Combine all text inputs that affect the conditioning output + # Note: search_text doesn't affect output, so it's excluded + combined = f"{text}|{prepend_text}|{append_text}" + + return hashlib.sha256(combined.encode()).hexdigest() diff --git a/prompt_manager_text.py b/prompt_manager_text.py index 48d2945..f4bd6fd 100644 --- a/prompt_manager_text.py +++ b/prompt_manager_text.py @@ -456,6 +456,19 @@ class PromptManagerText(ComfyNodeABC): """ self.cleanup_gallery_system() - # NOTE: IS_CHANGED intentionally removed to match CLIPTextEncode behavior - # ComfyUI's default caching (based on input values) should handle cache invalidation - # The previous IS_CHANGED implementation was causing input/cache mismatch issues + @classmethod + def IS_CHANGED(cls, text="", category="", tags="", search_text="", + prepend_text="", append_text="", **kwargs): + """ + ComfyUI method to determine if node needs re-execution. + + Returns a hash of input values that affect the text output. + This enables proper branch execution - only re-execute when inputs change. + """ + import hashlib + + # Combine all text inputs that affect the output + # Note: search_text doesn't affect output, so it's excluded + combined = f"{text}|{prepend_text}|{append_text}" + + return hashlib.sha256(combined.encode()).hexdigest() From 846b0b64b9d9e81d5ba1599618430abaddad81ed Mon Sep 17 00:00:00 2001 From: Vito Sansevero Date: Tue, 3 Feb 2026 08:39:29 -0800 Subject: [PATCH 2/2] chore: bump version to 3.0.30 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 39ff7ad..222da40 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "promptmanager" description = "A powerful ComfyUI custom node that extends the standard text encoder with persistent prompt storage, advanced search capabilities, and an automatic image gallery system using SQLite." -version = "3.0.29" +version = "3.0.30" license = {file = "LICENSE"} dependencies = ["# Core dependencies for PromptManager", "# Note: Most dependencies are already included with ComfyUI", "# Already included with Python standard library:", "# - sqlite3", "# - hashlib", "# - json", "# - datetime", "# - os", "# - typing", "# - threading", "# - uuid", "# Required for gallery functionality:", "watchdog>=2.1.0 # For file system monitoring", "Pillow>=8.0.0 # For image metadata extraction (usually included with ComfyUI)", "# Optional dependencies for enhanced search functionality:", "# fuzzywuzzy[speedup]>=0.18.0 # For fuzzy string matching (optional)", "# sqlalchemy>=1.4.0 # For advanced ORM features (optional)", "# Development dependencies (optional):", "# pytest>=6.0.0 # For running tests", "# black>=22.0.0 # For code formatting", "# flake8>=4.0.0 # For linting", "# mypy>=0.910 # For type checking"]