| """
|
| Feature flags module for ComfyUI WebSocket protocol negotiation.
|
|
|
| This module handles capability negotiation between frontend and backend,
|
| allowing graceful protocol evolution while maintaining backward compatibility.
|
| """
|
|
|
| from typing import Any
|
|
|
| from comfy.cli_args import args
|
|
|
|
|
| SERVER_FEATURE_FLAGS: dict[str, Any] = {
|
| "supports_preview_metadata": True,
|
| "max_upload_size": args.max_upload_size * 1024 * 1024,
|
| "extension": {"manager": {"supports_v4": True}},
|
| "node_replacements": True,
|
| "assets": args.enable_assets,
|
| }
|
|
|
|
|
| def get_connection_feature(
|
| sockets_metadata: dict[str, dict[str, Any]],
|
| sid: str,
|
| feature_name: str,
|
| default: Any = False
|
| ) -> Any:
|
| """
|
| Get a feature flag value for a specific connection.
|
|
|
| Args:
|
| sockets_metadata: Dictionary of socket metadata
|
| sid: Session ID of the connection
|
| feature_name: Name of the feature to check
|
| default: Default value if feature not found
|
|
|
| Returns:
|
| Feature value or default if not found
|
| """
|
| if sid not in sockets_metadata:
|
| return default
|
|
|
| return sockets_metadata[sid].get("feature_flags", {}).get(feature_name, default)
|
|
|
|
|
| def supports_feature(
|
| sockets_metadata: dict[str, dict[str, Any]],
|
| sid: str,
|
| feature_name: str
|
| ) -> bool:
|
| """
|
| Check if a connection supports a specific feature.
|
|
|
| Args:
|
| sockets_metadata: Dictionary of socket metadata
|
| sid: Session ID of the connection
|
| feature_name: Name of the feature to check
|
|
|
| Returns:
|
| Boolean indicating if feature is supported
|
| """
|
| return get_connection_feature(sockets_metadata, sid, feature_name, False) is True
|
|
|
|
|
| def get_server_features() -> dict[str, Any]:
|
| """
|
| Get the server's feature flags.
|
|
|
| Returns:
|
| Dictionary of server feature flags
|
| """
|
| return SERVER_FEATURE_FLAGS.copy()
|
|
|