Spaces:
Running
on
Zero
Running
on
Zero
from pydantic import BaseModel, Field, field_validator | |
from pydantic_settings import BaseSettings, SettingsConfigDict | |
from typing import List, Optional | |
# IMPORTANT: The type definitions specified in pyproject.toml for custom nodes | |
# must remain synchronized with the corresponding files in the https://github.com/Comfy-Org/comfy-cli/blob/main/comfy_cli/registry/types.py. | |
# Any changes to one must be reflected in the other to maintain consistency. | |
class NodeVersion(BaseModel): | |
changelog: str | |
dependencies: List[str] | |
deprecated: bool | |
id: str | |
version: str | |
download_url: str | |
class Node(BaseModel): | |
id: str | |
name: str | |
description: str | |
author: Optional[str] = None | |
license: Optional[str] = None | |
icon: Optional[str] = None | |
repository: Optional[str] = None | |
tags: List[str] = Field(default_factory=list) | |
latest_version: Optional[NodeVersion] = None | |
class PublishNodeVersionResponse(BaseModel): | |
node_version: NodeVersion | |
signedUrl: str | |
class URLs(BaseModel): | |
homepage: str = Field(default="", alias="Homepage") | |
documentation: str = Field(default="", alias="Documentation") | |
repository: str = Field(default="", alias="Repository") | |
issues: str = Field(default="", alias="Issues") | |
class Model(BaseModel): | |
location: str | |
model_url: str | |
class ComfyConfig(BaseModel): | |
publisher_id: str = Field(default="", alias="PublisherId") | |
display_name: str = Field(default="", alias="DisplayName") | |
icon: str = Field(default="", alias="Icon") | |
models: List[Model] = Field(default_factory=list, alias="Models") | |
includes: List[str] = Field(default_factory=list) | |
web: Optional[str] = None | |
banner_url: str = "" | |
class License(BaseModel): | |
file: str = "" | |
text: str = "" | |
class ProjectConfig(BaseModel): | |
name: str = "" | |
description: str = "" | |
version: str = "1.0.0" | |
requires_python: str = Field(default=">= 3.9", alias="requires-python") | |
dependencies: List[str] = Field(default_factory=list) | |
license: License = Field(default_factory=License) | |
urls: URLs = Field(default_factory=URLs) | |
supported_os: List[str] = Field(default_factory=list) | |
supported_accelerators: List[str] = Field(default_factory=list) | |
supported_comfyui_version: str = "" | |
supported_comfyui_frontend_version: str = "" | |
def validate_license(cls, v): | |
if isinstance(v, str): | |
return License(text=v) | |
elif isinstance(v, dict): | |
return License(**v) | |
elif isinstance(v, License): | |
return v | |
else: | |
return License() | |
class PyProjectConfig(BaseModel): | |
project: ProjectConfig = Field(default_factory=ProjectConfig) | |
tool_comfy: ComfyConfig = Field(default_factory=ComfyConfig) | |
class PyProjectSettings(BaseSettings): | |
project: dict = Field(default_factory=dict) | |
tool: dict = Field(default_factory=dict) | |
model_config = SettingsConfigDict(extra='allow') | |