From 1f138dd382bd4fe40c46a1fd1954dfbf0ddae924 Mon Sep 17 00:00:00 2001
From: Chenlei Hu <hcl@comfy.org>
Date: Mon, 10 Mar 2025 15:07:44 -0400
Subject: [PATCH] Only check frontend package if using default frontend

---
 app/frontend_management.py | 51 +++++++++++++++++++++++++++-----------
 main.py                    | 15 -----------
 2 files changed, 36 insertions(+), 30 deletions(-)

diff --git a/app/frontend_management.py b/app/frontend_management.py
index 308f71da6..f5a0358e6 100644
--- a/app/frontend_management.py
+++ b/app/frontend_management.py
@@ -17,27 +17,38 @@ from typing_extensions import NotRequired
 
 from comfy.cli_args import DEFAULT_VERSION_STRING
 
+# The path to the requirements.txt file
+req_path = Path(__file__).parents[1] / "requirements.txt"
 
 def frontend_install_warning_message():
-    req_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'requirements.txt'))
+    """The warning message to display when the frontend version is not up to date."""
+
     extra = ""
     if sys.flags.no_user_site:
         extra = "-s "
     return f"Please install the updated requirements.txt file by running:\n{sys.executable} {extra}-m pip install -r {req_path}\n\nThis error is happening because the ComfyUI frontend is no longer shipped as part of the main repo but as a pip package instead.\n\nIf you are on the portable package you can run: update\\update_comfyui.bat to solve this problem"
 
-try:
-    import comfyui_frontend_package
-except ImportError:
-    # TODO: Remove the check after roll out of 0.3.16
-    logging.error(f"\n\n********** ERROR ***********\n\ncomfyui-frontend-package is not installed. {frontend_install_warning_message()}\n********** ERROR **********\n")
-    exit(-1)
 
+def check_frontend_version():
+    """Check if the frontend version is up to date."""
+
+    def parse_version(version: str) -> tuple[int, int, int]:
+        return tuple(map(int, version.split(".")))
+
+    try:
+        import comfyui_frontend_package
+
+        frontend_version = parse_version(comfyui_frontend_package.__version__)
+        required_frontend = parse_version((0,))
+        with open(req_path, 'r', encoding='utf-8') as f:
+            required_frontend = parse_version(f.readline().split('=')[-1])
+        if frontend_version < required_frontend:
+            logging.warning("________________________________________________________________________\nWARNING WARNING WARNING WARNING WARNING\n\nInstalled frontend version {} is lower than the recommended version {}.\n\n{}\n________________________________________________________________________".format('.'.join(map(str, frontend_version)), '.'.join(map(str, required_frontend)), frontend_install_warning_message()))
+        else:
+            logging.info("ComfyUI frontend version: {}".format(comfyui_frontend_package.__version__))
+    except Exception as e:
+        logging.error(f"Failed to check frontend version: {e}")
 
-try:
-    frontend_version = tuple(map(int, comfyui_frontend_package.__version__.split(".")))
-except:
-    frontend_version = (0,)
-    pass
 
 REQUEST_TIMEOUT = 10  # seconds
 
@@ -133,9 +144,17 @@ def download_release_asset_zip(release: Release, destination_path: str) -> None:
 
 
 class FrontendManager:
-    DEFAULT_FRONTEND_PATH = str(importlib.resources.files(comfyui_frontend_package) / "static")
     CUSTOM_FRONTENDS_ROOT = str(Path(__file__).parents[1] / "web_custom_versions")
 
+    @classmethod
+    def default_frontend_path(cls) -> str:
+        try:
+            import comfyui_frontend_package
+            return str(importlib.resources.files(comfyui_frontend_package) / "static")
+        except ImportError:
+            logging.error(f"\n\n********** ERROR ***********\n\ncomfyui-frontend-package is not installed. {frontend_install_warning_message()}\n********** ERROR **********\n")
+            sys.exit(-1)
+
     @classmethod
     def parse_version_string(cls, value: str) -> tuple[str, str, str]:
         """
@@ -172,7 +191,8 @@ class FrontendManager:
             main error source might be request timeout or invalid URL.
         """
         if version_string == DEFAULT_VERSION_STRING:
-            return cls.DEFAULT_FRONTEND_PATH
+            check_frontend_version()
+            return cls.default_frontend_path()
 
         repo_owner, repo_name, version = cls.parse_version_string(version_string)
 
@@ -225,4 +245,5 @@ class FrontendManager:
         except Exception as e:
             logging.error("Failed to initialize frontend: %s", e)
             logging.info("Falling back to the default frontend.")
-            return cls.DEFAULT_FRONTEND_PATH
+            check_frontend_version()
+            return cls.default_frontend_path()
diff --git a/main.py b/main.py
index 6fa1cfb0f..dbc15b8ba 100644
--- a/main.py
+++ b/main.py
@@ -293,28 +293,13 @@ def start_comfyui(asyncio_loop=None):
     return asyncio_loop, prompt_server, start_all
 
 
-def warn_frontend_version(frontend_version):
-    try:
-        required_frontend = (0,)
-        req_path = os.path.join(os.path.dirname(__file__), 'requirements.txt')
-        with open(req_path, 'r') as f:
-            required_frontend = tuple(map(int, f.readline().split('=')[-1].split('.')))
-        if frontend_version < required_frontend:
-            logging.warning("________________________________________________________________________\nWARNING WARNING WARNING WARNING WARNING\n\nInstalled frontend version {} is lower than the recommended version {}.\n\n{}\n________________________________________________________________________".format('.'.join(map(str, frontend_version)), '.'.join(map(str, required_frontend)), app.frontend_management.frontend_install_warning_message()))
-    except:
-        pass
-
-
 if __name__ == "__main__":
     # Running directly, just start ComfyUI.
     logging.info("ComfyUI version: {}".format(comfyui_version.__version__))
-    frontend_version = app.frontend_management.frontend_version
-    logging.info("ComfyUI frontend version: {}".format('.'.join(map(str, frontend_version))))
 
     event_loop, _, start_all_func = start_comfyui()
     try:
         x = start_all_func()
-        warn_frontend_version(frontend_version)
         event_loop.run_until_complete(x)
     except KeyboardInterrupt:
         logging.info("\nStopped server")