mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-05-15 03:27:24 +08:00
Generalize frontend version warning to all comfy* requirements.txt entries
The frontend is itself a comfy* package, so check_frontend_version() is folded into check_comfy_packages_versions(), removing the duplication. /system_stats gains a comfy_package_versions list (purely additive).
This commit is contained in:
parent
c8673542f7
commit
7ab2941420
@ -38,40 +38,51 @@ def is_valid_version(version: str) -> bool:
|
|||||||
pattern = r"^(\d+)\.(\d+)\.(\d+)$"
|
pattern = r"^(\d+)\.(\d+)\.(\d+)$"
|
||||||
return bool(re.match(pattern, version))
|
return bool(re.match(pattern, version))
|
||||||
|
|
||||||
def get_installed_frontend_version():
|
|
||||||
"""Get the currently installed frontend package version."""
|
|
||||||
frontend_version_str = version("comfyui-frontend-package")
|
|
||||||
return frontend_version_str
|
|
||||||
|
|
||||||
|
|
||||||
def get_required_frontend_version():
|
def get_required_frontend_version():
|
||||||
return get_required_packages_versions().get("comfyui-frontend-package", None)
|
return get_required_packages_versions().get("comfyui-frontend-package", None)
|
||||||
|
|
||||||
|
|
||||||
def check_frontend_version():
|
def get_comfy_package_versions():
|
||||||
"""Check if the frontend version is up to date."""
|
"""List installed/required versions for every comfy* package in requirements.txt."""
|
||||||
|
out = []
|
||||||
|
for name, required in (get_required_packages_versions() or {}).items():
|
||||||
|
if not name.startswith("comfy"):
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
installed = version(name)
|
||||||
|
except Exception:
|
||||||
|
installed = None
|
||||||
|
out.append({"name": name, "installed": installed, "required": required})
|
||||||
|
return out
|
||||||
|
|
||||||
try:
|
|
||||||
frontend_version_str = get_installed_frontend_version()
|
def check_comfy_packages_versions():
|
||||||
frontend_version = parse_version(frontend_version_str)
|
"""Warn for every comfy* package whose installed version is below requirements.txt."""
|
||||||
required_frontend_str = get_required_frontend_version()
|
from packaging.version import InvalidVersion, parse as parse_pep440
|
||||||
required_frontend = parse_version(required_frontend_str)
|
for pkg in get_comfy_package_versions():
|
||||||
if frontend_version < required_frontend:
|
installed_str = pkg["installed"]
|
||||||
|
required_str = pkg["required"]
|
||||||
|
if not installed_str or not required_str:
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
outdated = parse_pep440(installed_str) < parse_pep440(required_str)
|
||||||
|
except InvalidVersion as e:
|
||||||
|
logging.error(f"Failed to check {pkg['name']} version: {e}")
|
||||||
|
continue
|
||||||
|
if outdated:
|
||||||
app.logger.log_startup_warning(
|
app.logger.log_startup_warning(
|
||||||
f"""
|
f"""
|
||||||
________________________________________________________________________
|
________________________________________________________________________
|
||||||
WARNING WARNING WARNING WARNING WARNING
|
WARNING WARNING WARNING WARNING WARNING
|
||||||
|
|
||||||
Installed frontend version {".".join(map(str, frontend_version))} is lower than the recommended version {".".join(map(str, required_frontend))}.
|
Installed {pkg["name"]} version {installed_str} is lower than the recommended version {required_str}.
|
||||||
|
|
||||||
{frontend_install_warning_message()}
|
{get_missing_requirements_message()}
|
||||||
________________________________________________________________________
|
________________________________________________________________________
|
||||||
""".strip()
|
""".strip()
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
logging.info("ComfyUI frontend version: {}".format(frontend_version_str))
|
logging.info("{} version: {}".format(pkg["name"], installed_str))
|
||||||
except Exception as e:
|
|
||||||
logging.error(f"Failed to check frontend version: {e}")
|
|
||||||
|
|
||||||
|
|
||||||
REQUEST_TIMEOUT = 10 # seconds
|
REQUEST_TIMEOUT = 10 # seconds
|
||||||
@ -201,6 +212,11 @@ class FrontendManager:
|
|||||||
def get_required_templates_version(cls) -> str:
|
def get_required_templates_version(cls) -> str:
|
||||||
return get_required_packages_versions().get("comfyui-workflow-templates", None)
|
return get_required_packages_versions().get("comfyui-workflow-templates", None)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_comfy_package_versions(cls):
|
||||||
|
"""List installed/required versions for every comfy* package in requirements.txt."""
|
||||||
|
return get_comfy_package_versions()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def default_frontend_path(cls) -> str:
|
def default_frontend_path(cls) -> str:
|
||||||
try:
|
try:
|
||||||
@ -341,7 +357,7 @@ comfyui-workflow-templates is not installed.
|
|||||||
main error source might be request timeout or invalid URL.
|
main error source might be request timeout or invalid URL.
|
||||||
"""
|
"""
|
||||||
if version_string == DEFAULT_VERSION_STRING:
|
if version_string == DEFAULT_VERSION_STRING:
|
||||||
check_frontend_version()
|
check_comfy_packages_versions()
|
||||||
return cls.default_frontend_path()
|
return cls.default_frontend_path()
|
||||||
|
|
||||||
repo_owner, repo_name, version = cls.parse_version_string(version_string)
|
repo_owner, repo_name, version = cls.parse_version_string(version_string)
|
||||||
@ -403,7 +419,7 @@ comfyui-workflow-templates is not installed.
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error("Failed to initialize frontend: %s", e)
|
logging.error("Failed to initialize frontend: %s", e)
|
||||||
logging.info("Falling back to the default frontend.")
|
logging.info("Falling back to the default frontend.")
|
||||||
check_frontend_version()
|
check_comfy_packages_versions()
|
||||||
return cls.default_frontend_path()
|
return cls.default_frontend_path()
|
||||||
@classmethod
|
@classmethod
|
||||||
def template_asset_handler(cls):
|
def template_asset_handler(cls):
|
||||||
|
|||||||
18
openapi.yaml
18
openapi.yaml
@ -2542,6 +2542,24 @@ components:
|
|||||||
type: string
|
type: string
|
||||||
nullable: true
|
nullable: true
|
||||||
description: Minimum required workflow templates version for this ComfyUI build
|
description: Minimum required workflow templates version for this ComfyUI build
|
||||||
|
comfy_package_versions:
|
||||||
|
type: array
|
||||||
|
description: Installed and required versions for every comfy* package pinned in requirements.txt
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
- installed
|
||||||
|
- required
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
installed:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
required:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
devices:
|
devices:
|
||||||
type: array
|
type: array
|
||||||
items:
|
items:
|
||||||
|
|||||||
@ -656,6 +656,7 @@ class PromptServer():
|
|||||||
required_frontend_version = FrontendManager.get_required_frontend_version()
|
required_frontend_version = FrontendManager.get_required_frontend_version()
|
||||||
installed_templates_version = FrontendManager.get_installed_templates_version()
|
installed_templates_version = FrontendManager.get_installed_templates_version()
|
||||||
required_templates_version = FrontendManager.get_required_templates_version()
|
required_templates_version = FrontendManager.get_required_templates_version()
|
||||||
|
comfy_package_versions = FrontendManager.get_comfy_package_versions()
|
||||||
|
|
||||||
system_stats = {
|
system_stats = {
|
||||||
"system": {
|
"system": {
|
||||||
@ -666,6 +667,7 @@ class PromptServer():
|
|||||||
"required_frontend_version": required_frontend_version,
|
"required_frontend_version": required_frontend_version,
|
||||||
"installed_templates_version": installed_templates_version,
|
"installed_templates_version": installed_templates_version,
|
||||||
"required_templates_version": required_templates_version,
|
"required_templates_version": required_templates_version,
|
||||||
|
"comfy_package_versions": comfy_package_versions,
|
||||||
"python_version": sys.version,
|
"python_version": sys.version,
|
||||||
"pytorch_version": comfy.model_management.torch_version,
|
"pytorch_version": comfy.model_management.torch_version,
|
||||||
"embedded_python": os.path.split(os.path.split(sys.executable)[0])[1] == "python_embeded",
|
"embedded_python": os.path.split(os.path.split(sys.executable)[0])[1] == "python_embeded",
|
||||||
|
|||||||
@ -147,7 +147,7 @@ def test_init_frontend_default_with_mocks():
|
|||||||
|
|
||||||
# Act
|
# Act
|
||||||
with (
|
with (
|
||||||
patch("app.frontend_management.check_frontend_version") as mock_check,
|
patch("app.frontend_management.check_comfy_packages_versions") as mock_check,
|
||||||
patch.object(
|
patch.object(
|
||||||
FrontendManager, "default_frontend_path", return_value="/mocked/path"
|
FrontendManager, "default_frontend_path", return_value="/mocked/path"
|
||||||
),
|
),
|
||||||
@ -168,7 +168,7 @@ def test_init_frontend_fallback_on_error():
|
|||||||
patch.object(
|
patch.object(
|
||||||
FrontendManager, "init_frontend_unsafe", side_effect=Exception("Test error")
|
FrontendManager, "init_frontend_unsafe", side_effect=Exception("Test error")
|
||||||
),
|
),
|
||||||
patch("app.frontend_management.check_frontend_version") as mock_check,
|
patch("app.frontend_management.check_comfy_packages_versions") as mock_check,
|
||||||
patch.object(
|
patch.object(
|
||||||
FrontendManager, "default_frontend_path", return_value="/default/path"
|
FrontendManager, "default_frontend_path", return_value="/default/path"
|
||||||
),
|
),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user