mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-01-20 10:07:54 -05:00
Compare commits
27 Commits
controlnet
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3707c3b034 | ||
|
|
5885db4ab5 | ||
|
|
36ed9b750d | ||
|
|
3cec06f86e | ||
|
|
28b5f7a1c5 | ||
|
|
22cbb23ae0 | ||
|
|
4d585e3eec | ||
|
|
006b4356bb | ||
|
|
da947866f2 | ||
|
|
84a2cc6fc9 | ||
|
|
b50534bb49 | ||
|
|
c305e79fee | ||
|
|
c32949d113 | ||
|
|
87a98902da | ||
|
|
2857a446c9 | ||
|
|
035d9432bd | ||
|
|
bdeb9fb1cf | ||
|
|
dadff57061 | ||
|
|
480857ae4e | ||
|
|
eaf0624004 | ||
|
|
58bca1b9f4 | ||
|
|
54aa6908fa | ||
|
|
e6d9daca96 | ||
|
|
6e5a529cb7 | ||
|
|
8c742a6e38 | ||
|
|
693373f1c1 | ||
|
|
4809080fd9 |
@@ -36,6 +36,9 @@ from pydantic_core import PydanticUndefined
|
|||||||
from invokeai.app.invocations.fields import (
|
from invokeai.app.invocations.fields import (
|
||||||
FieldKind,
|
FieldKind,
|
||||||
Input,
|
Input,
|
||||||
|
InputFieldJSONSchemaExtra,
|
||||||
|
UIType,
|
||||||
|
migrate_model_ui_type,
|
||||||
)
|
)
|
||||||
from invokeai.app.services.config.config_default import get_config
|
from invokeai.app.services.config.config_default import get_config
|
||||||
from invokeai.app.services.shared.invocation_context import InvocationContext
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
||||||
@@ -256,7 +259,9 @@ class BaseInvocation(ABC, BaseModel):
|
|||||||
is_intermediate: bool = Field(
|
is_intermediate: bool = Field(
|
||||||
default=False,
|
default=False,
|
||||||
description="Whether or not this is an intermediate invocation.",
|
description="Whether or not this is an intermediate invocation.",
|
||||||
json_schema_extra={"ui_type": "IsIntermediate", "field_kind": FieldKind.NodeAttribute},
|
json_schema_extra=InputFieldJSONSchemaExtra(
|
||||||
|
input=Input.Direct, field_kind=FieldKind.NodeAttribute, ui_type=UIType._IsIntermediate
|
||||||
|
).model_dump(exclude_none=True),
|
||||||
)
|
)
|
||||||
use_cache: bool = Field(
|
use_cache: bool = Field(
|
||||||
default=True,
|
default=True,
|
||||||
@@ -445,6 +450,15 @@ with warnings.catch_warnings():
|
|||||||
RESERVED_PYDANTIC_FIELD_NAMES = {m[0] for m in inspect.getmembers(_Model())}
|
RESERVED_PYDANTIC_FIELD_NAMES = {m[0] for m in inspect.getmembers(_Model())}
|
||||||
|
|
||||||
|
|
||||||
|
def is_enum_member(value: Any, enum_class: type[Enum]) -> bool:
|
||||||
|
"""Checks if a value is a member of an enum class."""
|
||||||
|
try:
|
||||||
|
enum_class(value)
|
||||||
|
return True
|
||||||
|
except ValueError:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def validate_fields(model_fields: dict[str, FieldInfo], model_type: str) -> None:
|
def validate_fields(model_fields: dict[str, FieldInfo], model_type: str) -> None:
|
||||||
"""
|
"""
|
||||||
Validates the fields of an invocation or invocation output:
|
Validates the fields of an invocation or invocation output:
|
||||||
@@ -456,51 +470,99 @@ def validate_fields(model_fields: dict[str, FieldInfo], model_type: str) -> None
|
|||||||
"""
|
"""
|
||||||
for name, field in model_fields.items():
|
for name, field in model_fields.items():
|
||||||
if name in RESERVED_PYDANTIC_FIELD_NAMES:
|
if name in RESERVED_PYDANTIC_FIELD_NAMES:
|
||||||
raise InvalidFieldError(f'Invalid field name "{name}" on "{model_type}" (reserved by pydantic)')
|
raise InvalidFieldError(f"{model_type}.{name}: Invalid field name (reserved by pydantic)")
|
||||||
|
|
||||||
if not field.annotation:
|
if not field.annotation:
|
||||||
raise InvalidFieldError(f'Invalid field type "{name}" on "{model_type}" (missing annotation)')
|
raise InvalidFieldError(f"{model_type}.{name}: Invalid field type (missing annotation)")
|
||||||
|
|
||||||
if not isinstance(field.json_schema_extra, dict):
|
if not isinstance(field.json_schema_extra, dict):
|
||||||
raise InvalidFieldError(
|
raise InvalidFieldError(f"{model_type}.{name}: Invalid field definition (missing json_schema_extra dict)")
|
||||||
f'Invalid field definition for "{name}" on "{model_type}" (missing json_schema_extra dict)'
|
|
||||||
)
|
|
||||||
|
|
||||||
field_kind = field.json_schema_extra.get("field_kind", None)
|
field_kind = field.json_schema_extra.get("field_kind", None)
|
||||||
|
|
||||||
# must have a field_kind
|
# must have a field_kind
|
||||||
if not isinstance(field_kind, FieldKind):
|
if not is_enum_member(field_kind, FieldKind):
|
||||||
raise InvalidFieldError(
|
raise InvalidFieldError(
|
||||||
f'Invalid field definition for "{name}" on "{model_type}" (maybe it\'s not an InputField or OutputField?)'
|
f"{model_type}.{name}: Invalid field definition for (maybe it's not an InputField or OutputField?)"
|
||||||
)
|
)
|
||||||
|
|
||||||
if field_kind is FieldKind.Input and (
|
if field_kind == FieldKind.Input.value and (
|
||||||
name in RESERVED_NODE_ATTRIBUTE_FIELD_NAMES or name in RESERVED_INPUT_FIELD_NAMES
|
name in RESERVED_NODE_ATTRIBUTE_FIELD_NAMES or name in RESERVED_INPUT_FIELD_NAMES
|
||||||
):
|
):
|
||||||
raise InvalidFieldError(f'Invalid field name "{name}" on "{model_type}" (reserved input field name)')
|
raise InvalidFieldError(f"{model_type}.{name}: Invalid field name (reserved input field name)")
|
||||||
|
|
||||||
if field_kind is FieldKind.Output and name in RESERVED_OUTPUT_FIELD_NAMES:
|
if field_kind == FieldKind.Output.value and name in RESERVED_OUTPUT_FIELD_NAMES:
|
||||||
raise InvalidFieldError(f'Invalid field name "{name}" on "{model_type}" (reserved output field name)')
|
raise InvalidFieldError(f"{model_type}.{name}: Invalid field name (reserved output field name)")
|
||||||
|
|
||||||
if (field_kind is FieldKind.Internal) and name not in RESERVED_INPUT_FIELD_NAMES:
|
if field_kind == FieldKind.Internal.value and name not in RESERVED_INPUT_FIELD_NAMES:
|
||||||
raise InvalidFieldError(
|
raise InvalidFieldError(f"{model_type}.{name}: Invalid field name (internal field without reserved name)")
|
||||||
f'Invalid field name "{name}" on "{model_type}" (internal field without reserved name)'
|
|
||||||
)
|
|
||||||
|
|
||||||
# node attribute fields *must* be in the reserved list
|
# node attribute fields *must* be in the reserved list
|
||||||
if (
|
if (
|
||||||
field_kind is FieldKind.NodeAttribute
|
field_kind == FieldKind.NodeAttribute.value
|
||||||
and name not in RESERVED_NODE_ATTRIBUTE_FIELD_NAMES
|
and name not in RESERVED_NODE_ATTRIBUTE_FIELD_NAMES
|
||||||
and name not in RESERVED_OUTPUT_FIELD_NAMES
|
and name not in RESERVED_OUTPUT_FIELD_NAMES
|
||||||
):
|
):
|
||||||
raise InvalidFieldError(
|
raise InvalidFieldError(
|
||||||
f'Invalid field name "{name}" on "{model_type}" (node attribute field without reserved name)'
|
f"{model_type}.{name}: Invalid field name (node attribute field without reserved name)"
|
||||||
)
|
)
|
||||||
|
|
||||||
ui_type = field.json_schema_extra.get("ui_type", None)
|
ui_type = field.json_schema_extra.get("ui_type", None)
|
||||||
if isinstance(ui_type, str) and ui_type.startswith("DEPRECATED_"):
|
ui_model_base = field.json_schema_extra.get("ui_model_base", None)
|
||||||
logger.warning(f'"UIType.{ui_type.split("_")[-1]}" is deprecated, ignoring')
|
ui_model_type = field.json_schema_extra.get("ui_model_type", None)
|
||||||
field.json_schema_extra.pop("ui_type")
|
ui_model_variant = field.json_schema_extra.get("ui_model_variant", None)
|
||||||
|
ui_model_format = field.json_schema_extra.get("ui_model_format", None)
|
||||||
|
|
||||||
|
if ui_type is not None:
|
||||||
|
# There are 3 cases where we may need to take action:
|
||||||
|
#
|
||||||
|
# 1. The ui_type is a migratable, deprecated value. For example, ui_type=UIType.MainModel value is
|
||||||
|
# deprecated and should be migrated to:
|
||||||
|
# - ui_model_base=[BaseModelType.StableDiffusion1, BaseModelType.StableDiffusion2]
|
||||||
|
# - ui_model_type=[ModelType.Main]
|
||||||
|
#
|
||||||
|
# 2. ui_type was set in conjunction with any of the new ui_model_[base|type|variant|format] fields, which
|
||||||
|
# is not allowed (they are mutually exclusive). In this case, we ignore ui_type and log a warning.
|
||||||
|
#
|
||||||
|
# 3. ui_type is a deprecated value that is not migratable. For example, ui_type=UIType.Image is deprecated;
|
||||||
|
# Image fields are now automatically detected based on the field's type annotation. In this case, we
|
||||||
|
# ignore ui_type and log a warning.
|
||||||
|
#
|
||||||
|
# The cases must be checked in this order to ensure proper handling.
|
||||||
|
|
||||||
|
# Easier to work with as an enum
|
||||||
|
ui_type = UIType(ui_type)
|
||||||
|
|
||||||
|
# The enum member values are not always the same as their names - we want to log the name so the user can
|
||||||
|
# easily review their code and see where the deprecated enum member is used.
|
||||||
|
human_readable_name = f"UIType.{ui_type.name}"
|
||||||
|
|
||||||
|
# Case 1: migratable deprecated value
|
||||||
|
did_migrate = migrate_model_ui_type(ui_type, field.json_schema_extra)
|
||||||
|
|
||||||
|
if did_migrate:
|
||||||
|
logger.warning(
|
||||||
|
f'{model_type}.{name}: Migrated deprecated "ui_type" "{human_readable_name}" to new ui_model_[base|type|variant|format] fields'
|
||||||
|
)
|
||||||
|
field.json_schema_extra.pop("ui_type")
|
||||||
|
|
||||||
|
# Case 2: mutually exclusive with new fields
|
||||||
|
elif (
|
||||||
|
ui_model_base is not None
|
||||||
|
or ui_model_type is not None
|
||||||
|
or ui_model_variant is not None
|
||||||
|
or ui_model_format is not None
|
||||||
|
):
|
||||||
|
logger.warning(
|
||||||
|
f'{model_type}.{name}: "ui_type" is mutually exclusive with "ui_model_[base|type|format|variant]", ignoring "ui_type"'
|
||||||
|
)
|
||||||
|
field.json_schema_extra.pop("ui_type")
|
||||||
|
|
||||||
|
# Case 3: deprecated value that is not migratable
|
||||||
|
elif ui_type.startswith("DEPRECATED_"):
|
||||||
|
logger.warning(f'{model_type}.{name}: Deprecated "ui_type" "{human_readable_name}", ignoring')
|
||||||
|
field.json_schema_extra.pop("ui_type")
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from invokeai.app.invocations.baseinvocation import (
|
|||||||
invocation,
|
invocation,
|
||||||
invocation_output,
|
invocation_output,
|
||||||
)
|
)
|
||||||
from invokeai.app.invocations.fields import FieldDescriptions, Input, InputField, OutputField, UIType
|
from invokeai.app.invocations.fields import FieldDescriptions, Input, InputField, OutputField
|
||||||
from invokeai.app.invocations.model import (
|
from invokeai.app.invocations.model import (
|
||||||
GlmEncoderField,
|
GlmEncoderField,
|
||||||
ModelIdentifierField,
|
ModelIdentifierField,
|
||||||
@@ -14,6 +14,7 @@ from invokeai.app.invocations.model import (
|
|||||||
)
|
)
|
||||||
from invokeai.app.services.shared.invocation_context import InvocationContext
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
||||||
from invokeai.backend.model_manager.config import SubModelType
|
from invokeai.backend.model_manager.config import SubModelType
|
||||||
|
from invokeai.backend.model_manager.taxonomy import BaseModelType, ModelType
|
||||||
|
|
||||||
|
|
||||||
@invocation_output("cogview4_model_loader_output")
|
@invocation_output("cogview4_model_loader_output")
|
||||||
@@ -38,8 +39,9 @@ class CogView4ModelLoaderInvocation(BaseInvocation):
|
|||||||
|
|
||||||
model: ModelIdentifierField = InputField(
|
model: ModelIdentifierField = InputField(
|
||||||
description=FieldDescriptions.cogview4_model,
|
description=FieldDescriptions.cogview4_model,
|
||||||
ui_type=UIType.CogView4MainModel,
|
|
||||||
input=Input.Direct,
|
input=Input.Direct,
|
||||||
|
ui_model_base=BaseModelType.CogView4,
|
||||||
|
ui_model_type=ModelType.Main,
|
||||||
)
|
)
|
||||||
|
|
||||||
def invoke(self, context: InvocationContext) -> CogView4ModelLoaderOutput:
|
def invoke(self, context: InvocationContext) -> CogView4ModelLoaderOutput:
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ from invokeai.app.invocations.fields import (
|
|||||||
ImageField,
|
ImageField,
|
||||||
InputField,
|
InputField,
|
||||||
OutputField,
|
OutputField,
|
||||||
UIType,
|
|
||||||
)
|
)
|
||||||
from invokeai.app.invocations.model import ModelIdentifierField
|
from invokeai.app.invocations.model import ModelIdentifierField
|
||||||
from invokeai.app.invocations.primitives import ImageOutput
|
from invokeai.app.invocations.primitives import ImageOutput
|
||||||
@@ -28,6 +27,7 @@ from invokeai.app.util.controlnet_utils import (
|
|||||||
heuristic_resize_fast,
|
heuristic_resize_fast,
|
||||||
)
|
)
|
||||||
from invokeai.backend.image_util.util import np_to_pil, pil_to_np
|
from invokeai.backend.image_util.util import np_to_pil, pil_to_np
|
||||||
|
from invokeai.backend.model_manager.taxonomy import BaseModelType, ModelType
|
||||||
|
|
||||||
|
|
||||||
class ControlField(BaseModel):
|
class ControlField(BaseModel):
|
||||||
@@ -63,13 +63,17 @@ class ControlOutput(BaseInvocationOutput):
|
|||||||
control: ControlField = OutputField(description=FieldDescriptions.control)
|
control: ControlField = OutputField(description=FieldDescriptions.control)
|
||||||
|
|
||||||
|
|
||||||
@invocation("controlnet", title="ControlNet - SD1.5, SDXL", tags=["controlnet"], category="controlnet", version="1.1.3")
|
@invocation(
|
||||||
|
"controlnet", title="ControlNet - SD1.5, SD2, SDXL", tags=["controlnet"], category="controlnet", version="1.1.3"
|
||||||
|
)
|
||||||
class ControlNetInvocation(BaseInvocation):
|
class ControlNetInvocation(BaseInvocation):
|
||||||
"""Collects ControlNet info to pass to other nodes"""
|
"""Collects ControlNet info to pass to other nodes"""
|
||||||
|
|
||||||
image: ImageField = InputField(description="The control image")
|
image: ImageField = InputField(description="The control image")
|
||||||
control_model: ModelIdentifierField = InputField(
|
control_model: ModelIdentifierField = InputField(
|
||||||
description=FieldDescriptions.controlnet_model, ui_type=UIType.ControlNetModel
|
description=FieldDescriptions.controlnet_model,
|
||||||
|
ui_model_base=[BaseModelType.StableDiffusion1, BaseModelType.StableDiffusion2, BaseModelType.StableDiffusionXL],
|
||||||
|
ui_model_type=ModelType.ControlNet,
|
||||||
)
|
)
|
||||||
control_weight: Union[float, List[float]] = InputField(
|
control_weight: Union[float, List[float]] = InputField(
|
||||||
default=1.0, ge=-1, le=2, description="The weight given to the ControlNet"
|
default=1.0, ge=-1, le=2, description="The weight given to the ControlNet"
|
||||||
|
|||||||
@@ -7,6 +7,13 @@ from pydantic_core import PydanticUndefined
|
|||||||
|
|
||||||
from invokeai.app.util.metaenum import MetaEnum
|
from invokeai.app.util.metaenum import MetaEnum
|
||||||
from invokeai.backend.image_util.segment_anything.shared import BoundingBox
|
from invokeai.backend.image_util.segment_anything.shared import BoundingBox
|
||||||
|
from invokeai.backend.model_manager.taxonomy import (
|
||||||
|
BaseModelType,
|
||||||
|
ClipVariantType,
|
||||||
|
ModelFormat,
|
||||||
|
ModelType,
|
||||||
|
ModelVariantType,
|
||||||
|
)
|
||||||
from invokeai.backend.util.logging import InvokeAILogger
|
from invokeai.backend.util.logging import InvokeAILogger
|
||||||
|
|
||||||
logger = InvokeAILogger.get_logger()
|
logger = InvokeAILogger.get_logger()
|
||||||
@@ -39,47 +46,15 @@ class UIType(str, Enum, metaclass=MetaEnum):
|
|||||||
used, and the type will be ignored. They are included here for backwards compatibility.
|
used, and the type will be ignored. They are included here for backwards compatibility.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# region Model Field Types
|
|
||||||
MainModel = "MainModelField"
|
|
||||||
CogView4MainModel = "CogView4MainModelField"
|
|
||||||
FluxMainModel = "FluxMainModelField"
|
|
||||||
SD3MainModel = "SD3MainModelField"
|
|
||||||
SDXLMainModel = "SDXLMainModelField"
|
|
||||||
SDXLRefinerModel = "SDXLRefinerModelField"
|
|
||||||
ONNXModel = "ONNXModelField"
|
|
||||||
VAEModel = "VAEModelField"
|
|
||||||
FluxVAEModel = "FluxVAEModelField"
|
|
||||||
LoRAModel = "LoRAModelField"
|
|
||||||
ControlNetModel = "ControlNetModelField"
|
|
||||||
IPAdapterModel = "IPAdapterModelField"
|
|
||||||
T2IAdapterModel = "T2IAdapterModelField"
|
|
||||||
T5EncoderModel = "T5EncoderModelField"
|
|
||||||
CLIPEmbedModel = "CLIPEmbedModelField"
|
|
||||||
CLIPLEmbedModel = "CLIPLEmbedModelField"
|
|
||||||
CLIPGEmbedModel = "CLIPGEmbedModelField"
|
|
||||||
SpandrelImageToImageModel = "SpandrelImageToImageModelField"
|
|
||||||
ControlLoRAModel = "ControlLoRAModelField"
|
|
||||||
SigLipModel = "SigLipModelField"
|
|
||||||
FluxReduxModel = "FluxReduxModelField"
|
|
||||||
LlavaOnevisionModel = "LLaVAModelField"
|
|
||||||
Imagen3Model = "Imagen3ModelField"
|
|
||||||
Imagen4Model = "Imagen4ModelField"
|
|
||||||
ChatGPT4oModel = "ChatGPT4oModelField"
|
|
||||||
Gemini2_5Model = "Gemini2_5ModelField"
|
|
||||||
FluxKontextModel = "FluxKontextModelField"
|
|
||||||
Veo3Model = "Veo3ModelField"
|
|
||||||
RunwayModel = "RunwayModelField"
|
|
||||||
# endregion
|
|
||||||
|
|
||||||
# region Misc Field Types
|
# region Misc Field Types
|
||||||
Scheduler = "SchedulerField"
|
Scheduler = "SchedulerField"
|
||||||
Any = "AnyField"
|
Any = "AnyField"
|
||||||
Video = "VideoField"
|
|
||||||
# endregion
|
# endregion
|
||||||
|
|
||||||
# region Internal Field Types
|
# region Internal Field Types
|
||||||
_Collection = "CollectionField"
|
_Collection = "CollectionField"
|
||||||
_CollectionItem = "CollectionItemField"
|
_CollectionItem = "CollectionItemField"
|
||||||
|
_IsIntermediate = "IsIntermediate"
|
||||||
# endregion
|
# endregion
|
||||||
|
|
||||||
# region DEPRECATED
|
# region DEPRECATED
|
||||||
@@ -117,13 +92,44 @@ class UIType(str, Enum, metaclass=MetaEnum):
|
|||||||
CollectionItem = "DEPRECATED_CollectionItem"
|
CollectionItem = "DEPRECATED_CollectionItem"
|
||||||
Enum = "DEPRECATED_Enum"
|
Enum = "DEPRECATED_Enum"
|
||||||
WorkflowField = "DEPRECATED_WorkflowField"
|
WorkflowField = "DEPRECATED_WorkflowField"
|
||||||
IsIntermediate = "DEPRECATED_IsIntermediate"
|
|
||||||
BoardField = "DEPRECATED_BoardField"
|
BoardField = "DEPRECATED_BoardField"
|
||||||
MetadataItem = "DEPRECATED_MetadataItem"
|
MetadataItem = "DEPRECATED_MetadataItem"
|
||||||
MetadataItemCollection = "DEPRECATED_MetadataItemCollection"
|
MetadataItemCollection = "DEPRECATED_MetadataItemCollection"
|
||||||
MetadataItemPolymorphic = "DEPRECATED_MetadataItemPolymorphic"
|
MetadataItemPolymorphic = "DEPRECATED_MetadataItemPolymorphic"
|
||||||
MetadataDict = "DEPRECATED_MetadataDict"
|
MetadataDict = "DEPRECATED_MetadataDict"
|
||||||
|
|
||||||
|
# Deprecated Model Field Types - use ui_model_[base|type|variant|format] instead
|
||||||
|
MainModel = "DEPRECATED_MainModelField"
|
||||||
|
CogView4MainModel = "DEPRECATED_CogView4MainModelField"
|
||||||
|
FluxMainModel = "DEPRECATED_FluxMainModelField"
|
||||||
|
SD3MainModel = "DEPRECATED_SD3MainModelField"
|
||||||
|
SDXLMainModel = "DEPRECATED_SDXLMainModelField"
|
||||||
|
SDXLRefinerModel = "DEPRECATED_SDXLRefinerModelField"
|
||||||
|
ONNXModel = "DEPRECATED_ONNXModelField"
|
||||||
|
VAEModel = "DEPRECATED_VAEModelField"
|
||||||
|
FluxVAEModel = "DEPRECATED_FluxVAEModelField"
|
||||||
|
LoRAModel = "DEPRECATED_LoRAModelField"
|
||||||
|
ControlNetModel = "DEPRECATED_ControlNetModelField"
|
||||||
|
IPAdapterModel = "DEPRECATED_IPAdapterModelField"
|
||||||
|
T2IAdapterModel = "DEPRECATED_T2IAdapterModelField"
|
||||||
|
T5EncoderModel = "DEPRECATED_T5EncoderModelField"
|
||||||
|
CLIPEmbedModel = "DEPRECATED_CLIPEmbedModelField"
|
||||||
|
CLIPLEmbedModel = "DEPRECATED_CLIPLEmbedModelField"
|
||||||
|
CLIPGEmbedModel = "DEPRECATED_CLIPGEmbedModelField"
|
||||||
|
SpandrelImageToImageModel = "DEPRECATED_SpandrelImageToImageModelField"
|
||||||
|
ControlLoRAModel = "DEPRECATED_ControlLoRAModelField"
|
||||||
|
SigLipModel = "DEPRECATED_SigLipModelField"
|
||||||
|
FluxReduxModel = "DEPRECATED_FluxReduxModelField"
|
||||||
|
LlavaOnevisionModel = "DEPRECATED_LLaVAModelField"
|
||||||
|
Imagen3Model = "DEPRECATED_Imagen3ModelField"
|
||||||
|
Imagen4Model = "DEPRECATED_Imagen4ModelField"
|
||||||
|
ChatGPT4oModel = "DEPRECATED_ChatGPT4oModelField"
|
||||||
|
Gemini2_5Model = "DEPRECATED_Gemini2_5ModelField"
|
||||||
|
FluxKontextModel = "DEPRECATED_FluxKontextModelField"
|
||||||
|
Veo3Model = "DEPRECATED_Veo3ModelField"
|
||||||
|
RunwayModel = "DEPRECATED_RunwayModelField"
|
||||||
|
# endregion
|
||||||
|
|
||||||
|
|
||||||
class UIComponent(str, Enum, metaclass=MetaEnum):
|
class UIComponent(str, Enum, metaclass=MetaEnum):
|
||||||
"""
|
"""
|
||||||
@@ -409,10 +415,15 @@ class InputFieldJSONSchemaExtra(BaseModel):
|
|||||||
ui_component: Optional[UIComponent] = None
|
ui_component: Optional[UIComponent] = None
|
||||||
ui_order: Optional[int] = None
|
ui_order: Optional[int] = None
|
||||||
ui_choice_labels: Optional[dict[str, str]] = None
|
ui_choice_labels: Optional[dict[str, str]] = None
|
||||||
|
ui_model_base: Optional[list[BaseModelType]] = None
|
||||||
|
ui_model_type: Optional[list[ModelType]] = None
|
||||||
|
ui_model_variant: Optional[list[ClipVariantType | ModelVariantType]] = None
|
||||||
|
ui_model_format: Optional[list[ModelFormat]] = None
|
||||||
|
|
||||||
model_config = ConfigDict(
|
model_config = ConfigDict(
|
||||||
validate_assignment=True,
|
validate_assignment=True,
|
||||||
json_schema_serialization_defaults_required=True,
|
json_schema_serialization_defaults_required=True,
|
||||||
|
use_enum_values=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -465,16 +476,121 @@ class OutputFieldJSONSchemaExtra(BaseModel):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
field_kind: FieldKind
|
field_kind: FieldKind
|
||||||
ui_hidden: bool
|
ui_hidden: bool = False
|
||||||
ui_type: Optional[UIType]
|
ui_order: Optional[int] = None
|
||||||
ui_order: Optional[int]
|
ui_type: Optional[UIType] = None
|
||||||
|
|
||||||
model_config = ConfigDict(
|
model_config = ConfigDict(
|
||||||
validate_assignment=True,
|
validate_assignment=True,
|
||||||
json_schema_serialization_defaults_required=True,
|
json_schema_serialization_defaults_required=True,
|
||||||
|
use_enum_values=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def migrate_model_ui_type(ui_type: UIType | str, json_schema_extra: dict[str, Any]) -> bool:
|
||||||
|
"""Migrate deprecated model-specifier ui_type values to new-style ui_model_[base|type|variant|format] in json_schema_extra."""
|
||||||
|
if not isinstance(ui_type, UIType):
|
||||||
|
ui_type = UIType(ui_type)
|
||||||
|
|
||||||
|
ui_model_type: list[ModelType] | None = None
|
||||||
|
ui_model_base: list[BaseModelType] | None = None
|
||||||
|
ui_model_format: list[ModelFormat] | None = None
|
||||||
|
ui_model_variant: list[ClipVariantType | ModelVariantType] | None = None
|
||||||
|
|
||||||
|
match ui_type:
|
||||||
|
case UIType.MainModel:
|
||||||
|
ui_model_base = [BaseModelType.StableDiffusion1, BaseModelType.StableDiffusion2]
|
||||||
|
ui_model_type = [ModelType.Main]
|
||||||
|
case UIType.CogView4MainModel:
|
||||||
|
ui_model_base = [BaseModelType.CogView4]
|
||||||
|
ui_model_type = [ModelType.Main]
|
||||||
|
case UIType.FluxMainModel:
|
||||||
|
ui_model_base = [BaseModelType.Flux]
|
||||||
|
ui_model_type = [ModelType.Main]
|
||||||
|
case UIType.SD3MainModel:
|
||||||
|
ui_model_base = [BaseModelType.StableDiffusion3]
|
||||||
|
ui_model_type = [ModelType.Main]
|
||||||
|
case UIType.SDXLMainModel:
|
||||||
|
ui_model_base = [BaseModelType.StableDiffusionXL]
|
||||||
|
ui_model_type = [ModelType.Main]
|
||||||
|
case UIType.SDXLRefinerModel:
|
||||||
|
ui_model_base = [BaseModelType.StableDiffusionXLRefiner]
|
||||||
|
ui_model_type = [ModelType.Main]
|
||||||
|
case UIType.VAEModel:
|
||||||
|
ui_model_type = [ModelType.VAE]
|
||||||
|
case UIType.FluxVAEModel:
|
||||||
|
ui_model_base = [BaseModelType.Flux]
|
||||||
|
ui_model_type = [ModelType.VAE]
|
||||||
|
case UIType.LoRAModel:
|
||||||
|
ui_model_type = [ModelType.LoRA]
|
||||||
|
case UIType.ControlNetModel:
|
||||||
|
ui_model_type = [ModelType.ControlNet]
|
||||||
|
case UIType.IPAdapterModel:
|
||||||
|
ui_model_type = [ModelType.IPAdapter]
|
||||||
|
case UIType.T2IAdapterModel:
|
||||||
|
ui_model_type = [ModelType.T2IAdapter]
|
||||||
|
case UIType.T5EncoderModel:
|
||||||
|
ui_model_type = [ModelType.T5Encoder]
|
||||||
|
case UIType.CLIPEmbedModel:
|
||||||
|
ui_model_type = [ModelType.CLIPEmbed]
|
||||||
|
case UIType.CLIPLEmbedModel:
|
||||||
|
ui_model_type = [ModelType.CLIPEmbed]
|
||||||
|
ui_model_variant = [ClipVariantType.L]
|
||||||
|
case UIType.CLIPGEmbedModel:
|
||||||
|
ui_model_type = [ModelType.CLIPEmbed]
|
||||||
|
ui_model_variant = [ClipVariantType.G]
|
||||||
|
case UIType.SpandrelImageToImageModel:
|
||||||
|
ui_model_type = [ModelType.SpandrelImageToImage]
|
||||||
|
case UIType.ControlLoRAModel:
|
||||||
|
ui_model_type = [ModelType.ControlLoRa]
|
||||||
|
case UIType.SigLipModel:
|
||||||
|
ui_model_type = [ModelType.SigLIP]
|
||||||
|
case UIType.FluxReduxModel:
|
||||||
|
ui_model_type = [ModelType.FluxRedux]
|
||||||
|
case UIType.LlavaOnevisionModel:
|
||||||
|
ui_model_type = [ModelType.LlavaOnevision]
|
||||||
|
case UIType.Imagen3Model:
|
||||||
|
ui_model_base = [BaseModelType.Imagen3]
|
||||||
|
ui_model_type = [ModelType.Main]
|
||||||
|
case UIType.Imagen4Model:
|
||||||
|
ui_model_base = [BaseModelType.Imagen4]
|
||||||
|
ui_model_type = [ModelType.Main]
|
||||||
|
case UIType.ChatGPT4oModel:
|
||||||
|
ui_model_base = [BaseModelType.ChatGPT4o]
|
||||||
|
ui_model_type = [ModelType.Main]
|
||||||
|
case UIType.Gemini2_5Model:
|
||||||
|
ui_model_base = [BaseModelType.Gemini2_5]
|
||||||
|
ui_model_type = [ModelType.Main]
|
||||||
|
case UIType.FluxKontextModel:
|
||||||
|
ui_model_base = [BaseModelType.FluxKontext]
|
||||||
|
ui_model_type = [ModelType.Main]
|
||||||
|
case UIType.Veo3Model:
|
||||||
|
ui_model_base = [BaseModelType.Veo3]
|
||||||
|
ui_model_type = [ModelType.Video]
|
||||||
|
case UIType.RunwayModel:
|
||||||
|
ui_model_base = [BaseModelType.Runway]
|
||||||
|
ui_model_type = [ModelType.Video]
|
||||||
|
case _:
|
||||||
|
pass
|
||||||
|
|
||||||
|
did_migrate = False
|
||||||
|
|
||||||
|
if ui_model_type is not None:
|
||||||
|
json_schema_extra["ui_model_type"] = [m.value for m in ui_model_type]
|
||||||
|
did_migrate = True
|
||||||
|
if ui_model_base is not None:
|
||||||
|
json_schema_extra["ui_model_base"] = [m.value for m in ui_model_base]
|
||||||
|
did_migrate = True
|
||||||
|
if ui_model_format is not None:
|
||||||
|
json_schema_extra["ui_model_format"] = [m.value for m in ui_model_format]
|
||||||
|
did_migrate = True
|
||||||
|
if ui_model_variant is not None:
|
||||||
|
json_schema_extra["ui_model_variant"] = [m.value for m in ui_model_variant]
|
||||||
|
did_migrate = True
|
||||||
|
|
||||||
|
return did_migrate
|
||||||
|
|
||||||
|
|
||||||
def InputField(
|
def InputField(
|
||||||
# copied from pydantic's Field
|
# copied from pydantic's Field
|
||||||
# TODO: Can we support default_factory?
|
# TODO: Can we support default_factory?
|
||||||
@@ -501,35 +617,63 @@ def InputField(
|
|||||||
ui_hidden: Optional[bool] = None,
|
ui_hidden: Optional[bool] = None,
|
||||||
ui_order: Optional[int] = None,
|
ui_order: Optional[int] = None,
|
||||||
ui_choice_labels: Optional[dict[str, str]] = None,
|
ui_choice_labels: Optional[dict[str, str]] = None,
|
||||||
|
ui_model_base: Optional[BaseModelType | list[BaseModelType]] = None,
|
||||||
|
ui_model_type: Optional[ModelType | list[ModelType]] = None,
|
||||||
|
ui_model_variant: Optional[ClipVariantType | ModelVariantType | list[ClipVariantType | ModelVariantType]] = None,
|
||||||
|
ui_model_format: Optional[ModelFormat | list[ModelFormat]] = None,
|
||||||
) -> Any:
|
) -> Any:
|
||||||
"""
|
"""
|
||||||
Creates an input field for an invocation.
|
Creates an input field for an invocation.
|
||||||
|
|
||||||
This is a wrapper for Pydantic's [Field](https://docs.pydantic.dev/latest/api/fields/#pydantic.fields.Field) \
|
This is a wrapper for Pydantic's [Field](https://docs.pydantic.dev/latest/api/fields/#pydantic.fields.Field)
|
||||||
that adds a few extra parameters to support graph execution and the node editor UI.
|
that adds a few extra parameters to support graph execution and the node editor UI.
|
||||||
|
|
||||||
:param Input input: [Input.Any] The kind of input this field requires. \
|
If the field is a `ModelIdentifierField`, use the `ui_model_[base|type|variant|format]` args to filter the model list
|
||||||
`Input.Direct` means a value must be provided on instantiation. \
|
in the Workflow Editor. Otherwise, use `ui_type` to provide extra type hints for the UI.
|
||||||
`Input.Connection` means the value must be provided by a connection. \
|
|
||||||
`Input.Any` means either will do.
|
|
||||||
|
|
||||||
:param UIType ui_type: [None] Optionally provides an extra type hint for the UI. \
|
Don't use both `ui_type` and `ui_model_[base|type|variant|format]` - if both are provided, a warning will be
|
||||||
In some situations, the field's type is not enough to infer the correct UI type. \
|
logged and `ui_type` will be ignored.
|
||||||
For example, model selection fields should render a dropdown UI component to select a model. \
|
|
||||||
Internally, there is no difference between SD-1, SD-2 and SDXL model fields, they all use \
|
|
||||||
`MainModelField`. So to ensure the base-model-specific UI is rendered, you can use \
|
|
||||||
`UIType.SDXLMainModelField` to indicate that the field is an SDXL main model field.
|
|
||||||
|
|
||||||
:param UIComponent ui_component: [None] Optionally specifies a specific component to use in the UI. \
|
Args:
|
||||||
The UI will always render a suitable component, but sometimes you want something different than the default. \
|
input: The kind of input this field requires.
|
||||||
For example, a `string` field will default to a single-line input, but you may want a multi-line textarea instead. \
|
- `Input.Direct` means a value must be provided on instantiation.
|
||||||
For this case, you could provide `UIComponent.Textarea`.
|
- `Input.Connection` means the value must be provided by a connection.
|
||||||
|
- `Input.Any` means either will do.
|
||||||
|
|
||||||
:param bool ui_hidden: [False] Specifies whether or not this field should be hidden in the UI.
|
ui_type: Optionally provides an extra type hint for the UI. In some situations, the field's type is not enough
|
||||||
|
to infer the correct UI type. For example, Scheduler fields are enums, but we want to render a special scheduler
|
||||||
|
dropdown in the UI. Use `UIType.Scheduler` to indicate this.
|
||||||
|
|
||||||
:param int ui_order: [None] Specifies the order in which this field should be rendered in the UI.
|
ui_component: Optionally specifies a specific component to use in the UI. The UI will always render a suitable
|
||||||
|
component, but sometimes you want something different than the default. For example, a `string` field will
|
||||||
|
default to a single-line input, but you may want a multi-line textarea instead. In this case, you could use
|
||||||
|
`UIComponent.Textarea`.
|
||||||
|
|
||||||
:param dict[str, str] ui_choice_labels: [None] Specifies the labels to use for the choices in an enum field.
|
ui_hidden: Specifies whether or not this field should be hidden in the UI.
|
||||||
|
|
||||||
|
ui_order: Specifies the order in which this field should be rendered in the UI. If omitted, the field will be
|
||||||
|
rendered after all fields with an explicit order, in the order they are defined in the Invocation class.
|
||||||
|
|
||||||
|
ui_model_base: Specifies the base model architectures to filter the model list by in the Workflow Editor. For
|
||||||
|
example, `ui_model_base=BaseModelType.StableDiffusionXL` will show only SDXL architecture models. This arg is
|
||||||
|
only valid if this Input field is annotated as a `ModelIdentifierField`.
|
||||||
|
|
||||||
|
ui_model_type: Specifies the model type(s) to filter the model list by in the Workflow Editor. For example,
|
||||||
|
`ui_model_type=ModelType.VAE` will show only VAE models. This arg is only valid if this Input field is
|
||||||
|
annotated as a `ModelIdentifierField`.
|
||||||
|
|
||||||
|
ui_model_variant: Specifies the model variant(s) to filter the model list by in the Workflow Editor. For example,
|
||||||
|
`ui_model_variant=ModelVariantType.Inpainting` will show only inpainting models. This arg is only valid if this
|
||||||
|
Input field is annotated as a `ModelIdentifierField`.
|
||||||
|
|
||||||
|
ui_model_format: Specifies the model format(s) to filter the model list by in the Workflow Editor. For example,
|
||||||
|
`ui_model_format=ModelFormat.Diffusers` will show only models in the diffusers format. This arg is only valid
|
||||||
|
if this Input field is annotated as a `ModelIdentifierField`.
|
||||||
|
|
||||||
|
ui_choice_labels: Specifies the labels to use for the choices in an enum field. If omitted, the enum values
|
||||||
|
will be used. This arg is only valid if the field is annotated with as a `Literal`. For example,
|
||||||
|
`Literal["choice1", "choice2", "choice3"]` with `ui_choice_labels={"choice1": "Choice 1", "choice2": "Choice 2",
|
||||||
|
"choice3": "Choice 3"}` will render a dropdown with the labels "Choice 1", "Choice 2" and "Choice 3".
|
||||||
"""
|
"""
|
||||||
|
|
||||||
json_schema_extra_ = InputFieldJSONSchemaExtra(
|
json_schema_extra_ = InputFieldJSONSchemaExtra(
|
||||||
@@ -537,8 +681,6 @@ def InputField(
|
|||||||
field_kind=FieldKind.Input,
|
field_kind=FieldKind.Input,
|
||||||
)
|
)
|
||||||
|
|
||||||
if ui_type is not None:
|
|
||||||
json_schema_extra_.ui_type = ui_type
|
|
||||||
if ui_component is not None:
|
if ui_component is not None:
|
||||||
json_schema_extra_.ui_component = ui_component
|
json_schema_extra_.ui_component = ui_component
|
||||||
if ui_hidden is not None:
|
if ui_hidden is not None:
|
||||||
@@ -547,6 +689,28 @@ def InputField(
|
|||||||
json_schema_extra_.ui_order = ui_order
|
json_schema_extra_.ui_order = ui_order
|
||||||
if ui_choice_labels is not None:
|
if ui_choice_labels is not None:
|
||||||
json_schema_extra_.ui_choice_labels = ui_choice_labels
|
json_schema_extra_.ui_choice_labels = ui_choice_labels
|
||||||
|
if ui_model_base is not None:
|
||||||
|
if isinstance(ui_model_base, list):
|
||||||
|
json_schema_extra_.ui_model_base = ui_model_base
|
||||||
|
else:
|
||||||
|
json_schema_extra_.ui_model_base = [ui_model_base]
|
||||||
|
if ui_model_type is not None:
|
||||||
|
if isinstance(ui_model_type, list):
|
||||||
|
json_schema_extra_.ui_model_type = ui_model_type
|
||||||
|
else:
|
||||||
|
json_schema_extra_.ui_model_type = [ui_model_type]
|
||||||
|
if ui_model_variant is not None:
|
||||||
|
if isinstance(ui_model_variant, list):
|
||||||
|
json_schema_extra_.ui_model_variant = ui_model_variant
|
||||||
|
else:
|
||||||
|
json_schema_extra_.ui_model_variant = [ui_model_variant]
|
||||||
|
if ui_model_format is not None:
|
||||||
|
if isinstance(ui_model_format, list):
|
||||||
|
json_schema_extra_.ui_model_format = ui_model_format
|
||||||
|
else:
|
||||||
|
json_schema_extra_.ui_model_format = [ui_model_format]
|
||||||
|
if ui_type is not None:
|
||||||
|
json_schema_extra_.ui_type = ui_type
|
||||||
|
|
||||||
"""
|
"""
|
||||||
There is a conflict between the typing of invocation definitions and the typing of an invocation's
|
There is a conflict between the typing of invocation definitions and the typing of an invocation's
|
||||||
@@ -648,20 +812,20 @@ def OutputField(
|
|||||||
"""
|
"""
|
||||||
Creates an output field for an invocation output.
|
Creates an output field for an invocation output.
|
||||||
|
|
||||||
This is a wrapper for Pydantic's [Field](https://docs.pydantic.dev/1.10/usage/schema/#field-customization) \
|
This is a wrapper for Pydantic's [Field](https://docs.pydantic.dev/1.10/usage/schema/#field-customization)
|
||||||
that adds a few extra parameters to support graph execution and the node editor UI.
|
that adds a few extra parameters to support graph execution and the node editor UI.
|
||||||
|
|
||||||
:param UIType ui_type: [None] Optionally provides an extra type hint for the UI. \
|
Args:
|
||||||
In some situations, the field's type is not enough to infer the correct UI type. \
|
ui_type: Optionally provides an extra type hint for the UI. In some situations, the field's type is not enough
|
||||||
For example, model selection fields should render a dropdown UI component to select a model. \
|
to infer the correct UI type. For example, Scheduler fields are enums, but we want to render a special scheduler
|
||||||
Internally, there is no difference between SD-1, SD-2 and SDXL model fields, they all use \
|
dropdown in the UI. Use `UIType.Scheduler` to indicate this.
|
||||||
`MainModelField`. So to ensure the base-model-specific UI is rendered, you can use \
|
|
||||||
`UIType.SDXLMainModelField` to indicate that the field is an SDXL main model field.
|
|
||||||
|
|
||||||
:param bool ui_hidden: [False] Specifies whether or not this field should be hidden in the UI. \
|
ui_hidden: Specifies whether or not this field should be hidden in the UI.
|
||||||
|
|
||||||
:param int ui_order: [None] Specifies the order in which this field should be rendered in the UI. \
|
ui_order: Specifies the order in which this field should be rendered in the UI. If omitted, the field will be
|
||||||
|
rendered after all fields with an explicit order, in the order they are defined in the Invocation class.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return Field(
|
return Field(
|
||||||
default=default,
|
default=default,
|
||||||
title=title,
|
title=title,
|
||||||
@@ -679,9 +843,9 @@ def OutputField(
|
|||||||
min_length=min_length,
|
min_length=min_length,
|
||||||
max_length=max_length,
|
max_length=max_length,
|
||||||
json_schema_extra=OutputFieldJSONSchemaExtra(
|
json_schema_extra=OutputFieldJSONSchemaExtra(
|
||||||
ui_type=ui_type,
|
|
||||||
ui_hidden=ui_hidden,
|
ui_hidden=ui_hidden,
|
||||||
ui_order=ui_order,
|
ui_order=ui_order,
|
||||||
|
ui_type=ui_type,
|
||||||
field_kind=FieldKind.Output,
|
field_kind=FieldKind.Output,
|
||||||
).model_dump(exclude_none=True),
|
).model_dump(exclude_none=True),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -4,9 +4,10 @@ from invokeai.app.invocations.baseinvocation import (
|
|||||||
invocation,
|
invocation,
|
||||||
invocation_output,
|
invocation_output,
|
||||||
)
|
)
|
||||||
from invokeai.app.invocations.fields import FieldDescriptions, ImageField, InputField, OutputField, UIType
|
from invokeai.app.invocations.fields import FieldDescriptions, ImageField, InputField, OutputField
|
||||||
from invokeai.app.invocations.model import ControlLoRAField, ModelIdentifierField
|
from invokeai.app.invocations.model import ControlLoRAField, ModelIdentifierField
|
||||||
from invokeai.app.services.shared.invocation_context import InvocationContext
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
||||||
|
from invokeai.backend.model_manager.taxonomy import BaseModelType, ModelType
|
||||||
|
|
||||||
|
|
||||||
@invocation_output("flux_control_lora_loader_output")
|
@invocation_output("flux_control_lora_loader_output")
|
||||||
@@ -29,7 +30,10 @@ class FluxControlLoRALoaderInvocation(BaseInvocation):
|
|||||||
"""LoRA model and Image to use with FLUX transformer generation."""
|
"""LoRA model and Image to use with FLUX transformer generation."""
|
||||||
|
|
||||||
lora: ModelIdentifierField = InputField(
|
lora: ModelIdentifierField = InputField(
|
||||||
description=FieldDescriptions.control_lora_model, title="Control LoRA", ui_type=UIType.ControlLoRAModel
|
description=FieldDescriptions.control_lora_model,
|
||||||
|
title="Control LoRA",
|
||||||
|
ui_model_base=BaseModelType.Flux,
|
||||||
|
ui_model_type=ModelType.ControlLoRa,
|
||||||
)
|
)
|
||||||
image: ImageField = InputField(description="The image to encode.")
|
image: ImageField = InputField(description="The image to encode.")
|
||||||
weight: float = InputField(description="The weight of the LoRA.", default=1.0)
|
weight: float = InputField(description="The weight of the LoRA.", default=1.0)
|
||||||
|
|||||||
@@ -6,11 +6,12 @@ from invokeai.app.invocations.baseinvocation import (
|
|||||||
invocation,
|
invocation,
|
||||||
invocation_output,
|
invocation_output,
|
||||||
)
|
)
|
||||||
from invokeai.app.invocations.fields import FieldDescriptions, ImageField, InputField, OutputField, UIType
|
from invokeai.app.invocations.fields import FieldDescriptions, ImageField, InputField, OutputField
|
||||||
from invokeai.app.invocations.model import ModelIdentifierField
|
from invokeai.app.invocations.model import ModelIdentifierField
|
||||||
from invokeai.app.invocations.util import validate_begin_end_step, validate_weights
|
from invokeai.app.invocations.util import validate_begin_end_step, validate_weights
|
||||||
from invokeai.app.services.shared.invocation_context import InvocationContext
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
||||||
from invokeai.app.util.controlnet_utils import CONTROLNET_RESIZE_VALUES
|
from invokeai.app.util.controlnet_utils import CONTROLNET_RESIZE_VALUES
|
||||||
|
from invokeai.backend.model_manager.taxonomy import BaseModelType, ModelType
|
||||||
|
|
||||||
|
|
||||||
class FluxControlNetField(BaseModel):
|
class FluxControlNetField(BaseModel):
|
||||||
@@ -57,7 +58,9 @@ class FluxControlNetInvocation(BaseInvocation):
|
|||||||
|
|
||||||
image: ImageField = InputField(description="The control image")
|
image: ImageField = InputField(description="The control image")
|
||||||
control_model: ModelIdentifierField = InputField(
|
control_model: ModelIdentifierField = InputField(
|
||||||
description=FieldDescriptions.controlnet_model, ui_type=UIType.ControlNetModel
|
description=FieldDescriptions.controlnet_model,
|
||||||
|
ui_model_base=BaseModelType.Flux,
|
||||||
|
ui_model_type=ModelType.ControlNet,
|
||||||
)
|
)
|
||||||
control_weight: float | list[float] = InputField(
|
control_weight: float | list[float] = InputField(
|
||||||
default=1.0, ge=-1, le=2, description="The weight given to the ControlNet"
|
default=1.0, ge=-1, le=2, description="The weight given to the ControlNet"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from pydantic import field_validator, model_validator
|
|||||||
from typing_extensions import Self
|
from typing_extensions import Self
|
||||||
|
|
||||||
from invokeai.app.invocations.baseinvocation import BaseInvocation, invocation
|
from invokeai.app.invocations.baseinvocation import BaseInvocation, invocation
|
||||||
from invokeai.app.invocations.fields import InputField, UIType
|
from invokeai.app.invocations.fields import InputField
|
||||||
from invokeai.app.invocations.ip_adapter import (
|
from invokeai.app.invocations.ip_adapter import (
|
||||||
CLIP_VISION_MODEL_MAP,
|
CLIP_VISION_MODEL_MAP,
|
||||||
IPAdapterField,
|
IPAdapterField,
|
||||||
@@ -20,6 +20,7 @@ from invokeai.backend.model_manager.config import (
|
|||||||
IPAdapterCheckpointConfig,
|
IPAdapterCheckpointConfig,
|
||||||
IPAdapterInvokeAIConfig,
|
IPAdapterInvokeAIConfig,
|
||||||
)
|
)
|
||||||
|
from invokeai.backend.model_manager.taxonomy import BaseModelType, ModelType
|
||||||
|
|
||||||
|
|
||||||
@invocation(
|
@invocation(
|
||||||
@@ -36,7 +37,10 @@ class FluxIPAdapterInvocation(BaseInvocation):
|
|||||||
|
|
||||||
image: ImageField = InputField(description="The IP-Adapter image prompt(s).")
|
image: ImageField = InputField(description="The IP-Adapter image prompt(s).")
|
||||||
ip_adapter_model: ModelIdentifierField = InputField(
|
ip_adapter_model: ModelIdentifierField = InputField(
|
||||||
description="The IP-Adapter model.", title="IP-Adapter Model", ui_type=UIType.IPAdapterModel
|
description="The IP-Adapter model.",
|
||||||
|
title="IP-Adapter Model",
|
||||||
|
ui_model_base=BaseModelType.Flux,
|
||||||
|
ui_model_type=ModelType.IPAdapter,
|
||||||
)
|
)
|
||||||
# Currently, the only known ViT model used by FLUX IP-Adapters is ViT-L.
|
# Currently, the only known ViT model used by FLUX IP-Adapters is ViT-L.
|
||||||
clip_vision_model: Literal["ViT-L"] = InputField(description="CLIP Vision model to use.", default="ViT-L")
|
clip_vision_model: Literal["ViT-L"] = InputField(description="CLIP Vision model to use.", default="ViT-L")
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ from invokeai.app.invocations.baseinvocation import (
|
|||||||
invocation,
|
invocation,
|
||||||
invocation_output,
|
invocation_output,
|
||||||
)
|
)
|
||||||
from invokeai.app.invocations.fields import FieldDescriptions, Input, InputField, OutputField, UIType
|
from invokeai.app.invocations.fields import FieldDescriptions, Input, InputField, OutputField
|
||||||
from invokeai.app.invocations.model import CLIPField, LoRAField, ModelIdentifierField, T5EncoderField, TransformerField
|
from invokeai.app.invocations.model import CLIPField, LoRAField, ModelIdentifierField, T5EncoderField, TransformerField
|
||||||
from invokeai.app.services.shared.invocation_context import InvocationContext
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
||||||
from invokeai.backend.model_manager.taxonomy import BaseModelType
|
from invokeai.backend.model_manager.taxonomy import BaseModelType, ModelType
|
||||||
|
|
||||||
|
|
||||||
@invocation_output("flux_lora_loader_output")
|
@invocation_output("flux_lora_loader_output")
|
||||||
@@ -36,7 +36,10 @@ class FluxLoRALoaderInvocation(BaseInvocation):
|
|||||||
"""Apply a LoRA model to a FLUX transformer and/or text encoder."""
|
"""Apply a LoRA model to a FLUX transformer and/or text encoder."""
|
||||||
|
|
||||||
lora: ModelIdentifierField = InputField(
|
lora: ModelIdentifierField = InputField(
|
||||||
description=FieldDescriptions.lora_model, title="LoRA", ui_type=UIType.LoRAModel
|
description=FieldDescriptions.lora_model,
|
||||||
|
title="LoRA",
|
||||||
|
ui_model_base=BaseModelType.Flux,
|
||||||
|
ui_model_type=ModelType.LoRA,
|
||||||
)
|
)
|
||||||
weight: float = InputField(default=0.75, description=FieldDescriptions.lora_weight)
|
weight: float = InputField(default=0.75, description=FieldDescriptions.lora_weight)
|
||||||
transformer: TransformerField | None = InputField(
|
transformer: TransformerField | None = InputField(
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from invokeai.app.invocations.baseinvocation import (
|
|||||||
invocation,
|
invocation,
|
||||||
invocation_output,
|
invocation_output,
|
||||||
)
|
)
|
||||||
from invokeai.app.invocations.fields import FieldDescriptions, Input, InputField, OutputField, UIType
|
from invokeai.app.invocations.fields import FieldDescriptions, Input, InputField, OutputField
|
||||||
from invokeai.app.invocations.model import CLIPField, ModelIdentifierField, T5EncoderField, TransformerField, VAEField
|
from invokeai.app.invocations.model import CLIPField, ModelIdentifierField, T5EncoderField, TransformerField, VAEField
|
||||||
from invokeai.app.services.shared.invocation_context import InvocationContext
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
||||||
from invokeai.app.util.t5_model_identifier import (
|
from invokeai.app.util.t5_model_identifier import (
|
||||||
@@ -17,7 +17,7 @@ from invokeai.backend.flux.util import max_seq_lengths
|
|||||||
from invokeai.backend.model_manager.config import (
|
from invokeai.backend.model_manager.config import (
|
||||||
CheckpointConfigBase,
|
CheckpointConfigBase,
|
||||||
)
|
)
|
||||||
from invokeai.backend.model_manager.taxonomy import SubModelType
|
from invokeai.backend.model_manager.taxonomy import BaseModelType, ModelType, SubModelType
|
||||||
|
|
||||||
|
|
||||||
@invocation_output("flux_model_loader_output")
|
@invocation_output("flux_model_loader_output")
|
||||||
@@ -46,23 +46,30 @@ class FluxModelLoaderInvocation(BaseInvocation):
|
|||||||
|
|
||||||
model: ModelIdentifierField = InputField(
|
model: ModelIdentifierField = InputField(
|
||||||
description=FieldDescriptions.flux_model,
|
description=FieldDescriptions.flux_model,
|
||||||
ui_type=UIType.FluxMainModel,
|
|
||||||
input=Input.Direct,
|
input=Input.Direct,
|
||||||
|
ui_model_base=BaseModelType.Flux,
|
||||||
|
ui_model_type=ModelType.Main,
|
||||||
)
|
)
|
||||||
|
|
||||||
t5_encoder_model: ModelIdentifierField = InputField(
|
t5_encoder_model: ModelIdentifierField = InputField(
|
||||||
description=FieldDescriptions.t5_encoder, ui_type=UIType.T5EncoderModel, input=Input.Direct, title="T5 Encoder"
|
description=FieldDescriptions.t5_encoder,
|
||||||
|
input=Input.Direct,
|
||||||
|
title="T5 Encoder",
|
||||||
|
ui_model_type=ModelType.T5Encoder,
|
||||||
)
|
)
|
||||||
|
|
||||||
clip_embed_model: ModelIdentifierField = InputField(
|
clip_embed_model: ModelIdentifierField = InputField(
|
||||||
description=FieldDescriptions.clip_embed_model,
|
description=FieldDescriptions.clip_embed_model,
|
||||||
ui_type=UIType.CLIPEmbedModel,
|
|
||||||
input=Input.Direct,
|
input=Input.Direct,
|
||||||
title="CLIP Embed",
|
title="CLIP Embed",
|
||||||
|
ui_model_type=ModelType.CLIPEmbed,
|
||||||
)
|
)
|
||||||
|
|
||||||
vae_model: ModelIdentifierField = InputField(
|
vae_model: ModelIdentifierField = InputField(
|
||||||
description=FieldDescriptions.vae_model, ui_type=UIType.FluxVAEModel, title="VAE"
|
description=FieldDescriptions.vae_model,
|
||||||
|
title="VAE",
|
||||||
|
ui_model_base=BaseModelType.Flux,
|
||||||
|
ui_model_type=ModelType.VAE,
|
||||||
)
|
)
|
||||||
|
|
||||||
def invoke(self, context: InvocationContext) -> FluxModelLoaderOutput:
|
def invoke(self, context: InvocationContext) -> FluxModelLoaderOutput:
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ from invokeai.app.invocations.fields import (
|
|||||||
InputField,
|
InputField,
|
||||||
OutputField,
|
OutputField,
|
||||||
TensorField,
|
TensorField,
|
||||||
UIType,
|
|
||||||
)
|
)
|
||||||
from invokeai.app.invocations.model import ModelIdentifierField
|
from invokeai.app.invocations.model import ModelIdentifierField
|
||||||
from invokeai.app.invocations.primitives import ImageField
|
from invokeai.app.invocations.primitives import ImageField
|
||||||
@@ -64,7 +63,8 @@ class FluxReduxInvocation(BaseInvocation):
|
|||||||
redux_model: ModelIdentifierField = InputField(
|
redux_model: ModelIdentifierField = InputField(
|
||||||
description="The FLUX Redux model to use.",
|
description="The FLUX Redux model to use.",
|
||||||
title="FLUX Redux Model",
|
title="FLUX Redux Model",
|
||||||
ui_type=UIType.FluxReduxModel,
|
ui_model_base=BaseModelType.Flux,
|
||||||
|
ui_model_type=ModelType.FluxRedux,
|
||||||
)
|
)
|
||||||
downsampling_factor: int = InputField(
|
downsampling_factor: int = InputField(
|
||||||
ge=1,
|
ge=1,
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from pydantic import BaseModel, Field, field_validator, model_validator
|
|||||||
from typing_extensions import Self
|
from typing_extensions import Self
|
||||||
|
|
||||||
from invokeai.app.invocations.baseinvocation import BaseInvocation, BaseInvocationOutput, invocation, invocation_output
|
from invokeai.app.invocations.baseinvocation import BaseInvocation, BaseInvocationOutput, invocation, invocation_output
|
||||||
from invokeai.app.invocations.fields import FieldDescriptions, InputField, OutputField, TensorField, UIType
|
from invokeai.app.invocations.fields import FieldDescriptions, InputField, OutputField, TensorField
|
||||||
from invokeai.app.invocations.model import ModelIdentifierField
|
from invokeai.app.invocations.model import ModelIdentifierField
|
||||||
from invokeai.app.invocations.primitives import ImageField
|
from invokeai.app.invocations.primitives import ImageField
|
||||||
from invokeai.app.invocations.util import validate_begin_end_step, validate_weights
|
from invokeai.app.invocations.util import validate_begin_end_step, validate_weights
|
||||||
@@ -85,7 +85,8 @@ class IPAdapterInvocation(BaseInvocation):
|
|||||||
description="The IP-Adapter model.",
|
description="The IP-Adapter model.",
|
||||||
title="IP-Adapter Model",
|
title="IP-Adapter Model",
|
||||||
ui_order=-1,
|
ui_order=-1,
|
||||||
ui_type=UIType.IPAdapterModel,
|
ui_model_base=[BaseModelType.StableDiffusion1, BaseModelType.StableDiffusionXL],
|
||||||
|
ui_model_type=ModelType.IPAdapter,
|
||||||
)
|
)
|
||||||
clip_vision_model: Literal["ViT-H", "ViT-G", "ViT-L"] = InputField(
|
clip_vision_model: Literal["ViT-H", "ViT-G", "ViT-L"] = InputField(
|
||||||
description="CLIP Vision model to use. Overrides model settings. Mandatory for checkpoint models.",
|
description="CLIP Vision model to use. Overrides model settings. Mandatory for checkpoint models.",
|
||||||
|
|||||||
@@ -6,11 +6,12 @@ from pydantic import field_validator
|
|||||||
from transformers import AutoProcessor, LlavaOnevisionForConditionalGeneration, LlavaOnevisionProcessor
|
from transformers import AutoProcessor, LlavaOnevisionForConditionalGeneration, LlavaOnevisionProcessor
|
||||||
|
|
||||||
from invokeai.app.invocations.baseinvocation import BaseInvocation, Classification, invocation
|
from invokeai.app.invocations.baseinvocation import BaseInvocation, Classification, invocation
|
||||||
from invokeai.app.invocations.fields import FieldDescriptions, ImageField, InputField, UIComponent, UIType
|
from invokeai.app.invocations.fields import FieldDescriptions, ImageField, InputField, UIComponent
|
||||||
from invokeai.app.invocations.model import ModelIdentifierField
|
from invokeai.app.invocations.model import ModelIdentifierField
|
||||||
from invokeai.app.invocations.primitives import StringOutput
|
from invokeai.app.invocations.primitives import StringOutput
|
||||||
from invokeai.app.services.shared.invocation_context import InvocationContext
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
||||||
from invokeai.backend.llava_onevision_pipeline import LlavaOnevisionPipeline
|
from invokeai.backend.llava_onevision_pipeline import LlavaOnevisionPipeline
|
||||||
|
from invokeai.backend.model_manager.taxonomy import ModelType
|
||||||
from invokeai.backend.util.devices import TorchDevice
|
from invokeai.backend.util.devices import TorchDevice
|
||||||
|
|
||||||
|
|
||||||
@@ -34,7 +35,7 @@ class LlavaOnevisionVllmInvocation(BaseInvocation):
|
|||||||
vllm_model: ModelIdentifierField = InputField(
|
vllm_model: ModelIdentifierField = InputField(
|
||||||
title="LLaVA Model Type",
|
title="LLaVA Model Type",
|
||||||
description=FieldDescriptions.vllm_model,
|
description=FieldDescriptions.vllm_model,
|
||||||
ui_type=UIType.LlavaOnevisionModel,
|
ui_model_type=ModelType.LlavaOnevision,
|
||||||
)
|
)
|
||||||
|
|
||||||
@field_validator("images", mode="before")
|
@field_validator("images", mode="before")
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ from invokeai.app.invocations.primitives import (
|
|||||||
from invokeai.app.invocations.scheduler import SchedulerOutput
|
from invokeai.app.invocations.scheduler import SchedulerOutput
|
||||||
from invokeai.app.invocations.t2i_adapter import T2IAdapterField, T2IAdapterInvocation
|
from invokeai.app.invocations.t2i_adapter import T2IAdapterField, T2IAdapterInvocation
|
||||||
from invokeai.app.services.shared.invocation_context import InvocationContext
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
||||||
from invokeai.backend.model_manager.taxonomy import ModelType, SubModelType
|
from invokeai.backend.model_manager.taxonomy import BaseModelType, ModelType, SubModelType
|
||||||
from invokeai.backend.stable_diffusion.schedulers.schedulers import SCHEDULER_NAME_VALUES
|
from invokeai.backend.stable_diffusion.schedulers.schedulers import SCHEDULER_NAME_VALUES
|
||||||
from invokeai.version import __version__
|
from invokeai.version import __version__
|
||||||
|
|
||||||
@@ -473,7 +473,6 @@ class MetadataToModelOutput(BaseInvocationOutput):
|
|||||||
model: ModelIdentifierField = OutputField(
|
model: ModelIdentifierField = OutputField(
|
||||||
description=FieldDescriptions.main_model,
|
description=FieldDescriptions.main_model,
|
||||||
title="Model",
|
title="Model",
|
||||||
ui_type=UIType.MainModel,
|
|
||||||
)
|
)
|
||||||
name: str = OutputField(description="Model Name", title="Name")
|
name: str = OutputField(description="Model Name", title="Name")
|
||||||
unet: UNetField = OutputField(description=FieldDescriptions.unet, title="UNet")
|
unet: UNetField = OutputField(description=FieldDescriptions.unet, title="UNet")
|
||||||
@@ -488,7 +487,6 @@ class MetadataToSDXLModelOutput(BaseInvocationOutput):
|
|||||||
model: ModelIdentifierField = OutputField(
|
model: ModelIdentifierField = OutputField(
|
||||||
description=FieldDescriptions.main_model,
|
description=FieldDescriptions.main_model,
|
||||||
title="Model",
|
title="Model",
|
||||||
ui_type=UIType.SDXLMainModel,
|
|
||||||
)
|
)
|
||||||
name: str = OutputField(description="Model Name", title="Name")
|
name: str = OutputField(description="Model Name", title="Name")
|
||||||
unet: UNetField = OutputField(description=FieldDescriptions.unet, title="UNet")
|
unet: UNetField = OutputField(description=FieldDescriptions.unet, title="UNet")
|
||||||
@@ -519,8 +517,7 @@ class MetadataToModelInvocation(BaseInvocation, WithMetadata):
|
|||||||
input=Input.Direct,
|
input=Input.Direct,
|
||||||
)
|
)
|
||||||
default_value: ModelIdentifierField = InputField(
|
default_value: ModelIdentifierField = InputField(
|
||||||
description="The default model to use if not found in the metadata",
|
description="The default model to use if not found in the metadata", ui_model_type=ModelType.Main
|
||||||
ui_type=UIType.MainModel,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
_validate_custom_label = model_validator(mode="after")(validate_custom_label)
|
_validate_custom_label = model_validator(mode="after")(validate_custom_label)
|
||||||
@@ -575,7 +572,8 @@ class MetadataToSDXLModelInvocation(BaseInvocation, WithMetadata):
|
|||||||
)
|
)
|
||||||
default_value: ModelIdentifierField = InputField(
|
default_value: ModelIdentifierField = InputField(
|
||||||
description="The default SDXL Model to use if not found in the metadata",
|
description="The default SDXL Model to use if not found in the metadata",
|
||||||
ui_type=UIType.SDXLMainModel,
|
ui_model_type=ModelType.Main,
|
||||||
|
ui_model_base=BaseModelType.StableDiffusionXL,
|
||||||
)
|
)
|
||||||
|
|
||||||
_validate_custom_label = model_validator(mode="after")(validate_custom_label)
|
_validate_custom_label = model_validator(mode="after")(validate_custom_label)
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from invokeai.app.invocations.baseinvocation import (
|
|||||||
invocation,
|
invocation,
|
||||||
invocation_output,
|
invocation_output,
|
||||||
)
|
)
|
||||||
from invokeai.app.invocations.fields import FieldDescriptions, ImageField, Input, InputField, OutputField, UIType
|
from invokeai.app.invocations.fields import FieldDescriptions, ImageField, Input, InputField, OutputField
|
||||||
from invokeai.app.services.shared.invocation_context import InvocationContext
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
||||||
from invokeai.app.shared.models import FreeUConfig
|
from invokeai.app.shared.models import FreeUConfig
|
||||||
from invokeai.backend.model_manager.config import (
|
from invokeai.backend.model_manager.config import (
|
||||||
@@ -145,7 +145,7 @@ class ModelIdentifierInvocation(BaseInvocation):
|
|||||||
|
|
||||||
@invocation(
|
@invocation(
|
||||||
"main_model_loader",
|
"main_model_loader",
|
||||||
title="Main Model - SD1.5",
|
title="Main Model - SD1.5, SD2",
|
||||||
tags=["model"],
|
tags=["model"],
|
||||||
category="model",
|
category="model",
|
||||||
version="1.0.4",
|
version="1.0.4",
|
||||||
@@ -153,7 +153,11 @@ class ModelIdentifierInvocation(BaseInvocation):
|
|||||||
class MainModelLoaderInvocation(BaseInvocation):
|
class MainModelLoaderInvocation(BaseInvocation):
|
||||||
"""Loads a main model, outputting its submodels."""
|
"""Loads a main model, outputting its submodels."""
|
||||||
|
|
||||||
model: ModelIdentifierField = InputField(description=FieldDescriptions.main_model, ui_type=UIType.MainModel)
|
model: ModelIdentifierField = InputField(
|
||||||
|
description=FieldDescriptions.main_model,
|
||||||
|
ui_model_base=[BaseModelType.StableDiffusion1, BaseModelType.StableDiffusion2],
|
||||||
|
ui_model_type=ModelType.Main,
|
||||||
|
)
|
||||||
# TODO: precision?
|
# TODO: precision?
|
||||||
|
|
||||||
def invoke(self, context: InvocationContext) -> ModelLoaderOutput:
|
def invoke(self, context: InvocationContext) -> ModelLoaderOutput:
|
||||||
@@ -187,7 +191,10 @@ class LoRALoaderInvocation(BaseInvocation):
|
|||||||
"""Apply selected lora to unet and text_encoder."""
|
"""Apply selected lora to unet and text_encoder."""
|
||||||
|
|
||||||
lora: ModelIdentifierField = InputField(
|
lora: ModelIdentifierField = InputField(
|
||||||
description=FieldDescriptions.lora_model, title="LoRA", ui_type=UIType.LoRAModel
|
description=FieldDescriptions.lora_model,
|
||||||
|
title="LoRA",
|
||||||
|
ui_model_base=BaseModelType.StableDiffusion1,
|
||||||
|
ui_model_type=ModelType.LoRA,
|
||||||
)
|
)
|
||||||
weight: float = InputField(default=0.75, description=FieldDescriptions.lora_weight)
|
weight: float = InputField(default=0.75, description=FieldDescriptions.lora_weight)
|
||||||
unet: Optional[UNetField] = InputField(
|
unet: Optional[UNetField] = InputField(
|
||||||
@@ -250,7 +257,9 @@ class LoRASelectorInvocation(BaseInvocation):
|
|||||||
"""Selects a LoRA model and weight."""
|
"""Selects a LoRA model and weight."""
|
||||||
|
|
||||||
lora: ModelIdentifierField = InputField(
|
lora: ModelIdentifierField = InputField(
|
||||||
description=FieldDescriptions.lora_model, title="LoRA", ui_type=UIType.LoRAModel
|
description=FieldDescriptions.lora_model,
|
||||||
|
title="LoRA",
|
||||||
|
ui_model_type=ModelType.LoRA,
|
||||||
)
|
)
|
||||||
weight: float = InputField(default=0.75, description=FieldDescriptions.lora_weight)
|
weight: float = InputField(default=0.75, description=FieldDescriptions.lora_weight)
|
||||||
|
|
||||||
@@ -332,7 +341,10 @@ class SDXLLoRALoaderInvocation(BaseInvocation):
|
|||||||
"""Apply selected lora to unet and text_encoder."""
|
"""Apply selected lora to unet and text_encoder."""
|
||||||
|
|
||||||
lora: ModelIdentifierField = InputField(
|
lora: ModelIdentifierField = InputField(
|
||||||
description=FieldDescriptions.lora_model, title="LoRA", ui_type=UIType.LoRAModel
|
description=FieldDescriptions.lora_model,
|
||||||
|
title="LoRA",
|
||||||
|
ui_model_base=BaseModelType.StableDiffusionXL,
|
||||||
|
ui_model_type=ModelType.LoRA,
|
||||||
)
|
)
|
||||||
weight: float = InputField(default=0.75, description=FieldDescriptions.lora_weight)
|
weight: float = InputField(default=0.75, description=FieldDescriptions.lora_weight)
|
||||||
unet: Optional[UNetField] = InputField(
|
unet: Optional[UNetField] = InputField(
|
||||||
@@ -473,13 +485,26 @@ class SDXLLoRACollectionLoader(BaseInvocation):
|
|||||||
|
|
||||||
|
|
||||||
@invocation(
|
@invocation(
|
||||||
"vae_loader", title="VAE Model - SD1.5, SDXL, SD3, FLUX", tags=["vae", "model"], category="model", version="1.0.4"
|
"vae_loader",
|
||||||
|
title="VAE Model - SD1.5, SD2, SDXL, SD3, FLUX",
|
||||||
|
tags=["vae", "model"],
|
||||||
|
category="model",
|
||||||
|
version="1.0.4",
|
||||||
)
|
)
|
||||||
class VAELoaderInvocation(BaseInvocation):
|
class VAELoaderInvocation(BaseInvocation):
|
||||||
"""Loads a VAE model, outputting a VaeLoaderOutput"""
|
"""Loads a VAE model, outputting a VaeLoaderOutput"""
|
||||||
|
|
||||||
vae_model: ModelIdentifierField = InputField(
|
vae_model: ModelIdentifierField = InputField(
|
||||||
description=FieldDescriptions.vae_model, title="VAE", ui_type=UIType.VAEModel
|
description=FieldDescriptions.vae_model,
|
||||||
|
title="VAE",
|
||||||
|
ui_model_base=[
|
||||||
|
BaseModelType.StableDiffusion1,
|
||||||
|
BaseModelType.StableDiffusion2,
|
||||||
|
BaseModelType.StableDiffusionXL,
|
||||||
|
BaseModelType.StableDiffusion3,
|
||||||
|
BaseModelType.Flux,
|
||||||
|
],
|
||||||
|
ui_model_type=ModelType.VAE,
|
||||||
)
|
)
|
||||||
|
|
||||||
def invoke(self, context: InvocationContext) -> VAEOutput:
|
def invoke(self, context: InvocationContext) -> VAEOutput:
|
||||||
|
|||||||
@@ -6,14 +6,14 @@ from invokeai.app.invocations.baseinvocation import (
|
|||||||
invocation,
|
invocation,
|
||||||
invocation_output,
|
invocation_output,
|
||||||
)
|
)
|
||||||
from invokeai.app.invocations.fields import FieldDescriptions, Input, InputField, OutputField, UIType
|
from invokeai.app.invocations.fields import FieldDescriptions, Input, InputField, OutputField
|
||||||
from invokeai.app.invocations.model import CLIPField, ModelIdentifierField, T5EncoderField, TransformerField, VAEField
|
from invokeai.app.invocations.model import CLIPField, ModelIdentifierField, T5EncoderField, TransformerField, VAEField
|
||||||
from invokeai.app.services.shared.invocation_context import InvocationContext
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
||||||
from invokeai.app.util.t5_model_identifier import (
|
from invokeai.app.util.t5_model_identifier import (
|
||||||
preprocess_t5_encoder_model_identifier,
|
preprocess_t5_encoder_model_identifier,
|
||||||
preprocess_t5_tokenizer_model_identifier,
|
preprocess_t5_tokenizer_model_identifier,
|
||||||
)
|
)
|
||||||
from invokeai.backend.model_manager.taxonomy import SubModelType
|
from invokeai.backend.model_manager.taxonomy import BaseModelType, ClipVariantType, ModelType, SubModelType
|
||||||
|
|
||||||
|
|
||||||
@invocation_output("sd3_model_loader_output")
|
@invocation_output("sd3_model_loader_output")
|
||||||
@@ -39,36 +39,43 @@ class Sd3ModelLoaderInvocation(BaseInvocation):
|
|||||||
|
|
||||||
model: ModelIdentifierField = InputField(
|
model: ModelIdentifierField = InputField(
|
||||||
description=FieldDescriptions.sd3_model,
|
description=FieldDescriptions.sd3_model,
|
||||||
ui_type=UIType.SD3MainModel,
|
|
||||||
input=Input.Direct,
|
input=Input.Direct,
|
||||||
|
ui_model_base=BaseModelType.StableDiffusion3,
|
||||||
|
ui_model_type=ModelType.Main,
|
||||||
)
|
)
|
||||||
|
|
||||||
t5_encoder_model: Optional[ModelIdentifierField] = InputField(
|
t5_encoder_model: Optional[ModelIdentifierField] = InputField(
|
||||||
description=FieldDescriptions.t5_encoder,
|
description=FieldDescriptions.t5_encoder,
|
||||||
ui_type=UIType.T5EncoderModel,
|
|
||||||
input=Input.Direct,
|
input=Input.Direct,
|
||||||
title="T5 Encoder",
|
title="T5 Encoder",
|
||||||
default=None,
|
default=None,
|
||||||
|
ui_model_type=ModelType.T5Encoder,
|
||||||
)
|
)
|
||||||
|
|
||||||
clip_l_model: Optional[ModelIdentifierField] = InputField(
|
clip_l_model: Optional[ModelIdentifierField] = InputField(
|
||||||
description=FieldDescriptions.clip_embed_model,
|
description=FieldDescriptions.clip_embed_model,
|
||||||
ui_type=UIType.CLIPLEmbedModel,
|
|
||||||
input=Input.Direct,
|
input=Input.Direct,
|
||||||
title="CLIP L Encoder",
|
title="CLIP L Encoder",
|
||||||
default=None,
|
default=None,
|
||||||
|
ui_model_type=ModelType.CLIPEmbed,
|
||||||
|
ui_model_variant=ClipVariantType.L,
|
||||||
)
|
)
|
||||||
|
|
||||||
clip_g_model: Optional[ModelIdentifierField] = InputField(
|
clip_g_model: Optional[ModelIdentifierField] = InputField(
|
||||||
description=FieldDescriptions.clip_g_model,
|
description=FieldDescriptions.clip_g_model,
|
||||||
ui_type=UIType.CLIPGEmbedModel,
|
|
||||||
input=Input.Direct,
|
input=Input.Direct,
|
||||||
title="CLIP G Encoder",
|
title="CLIP G Encoder",
|
||||||
default=None,
|
default=None,
|
||||||
|
ui_model_type=ModelType.CLIPEmbed,
|
||||||
|
ui_model_variant=ClipVariantType.G,
|
||||||
)
|
)
|
||||||
|
|
||||||
vae_model: Optional[ModelIdentifierField] = InputField(
|
vae_model: Optional[ModelIdentifierField] = InputField(
|
||||||
description=FieldDescriptions.vae_model, ui_type=UIType.VAEModel, title="VAE", default=None
|
description=FieldDescriptions.vae_model,
|
||||||
|
title="VAE",
|
||||||
|
default=None,
|
||||||
|
ui_model_base=BaseModelType.StableDiffusion3,
|
||||||
|
ui_model_type=ModelType.VAE,
|
||||||
)
|
)
|
||||||
|
|
||||||
def invoke(self, context: InvocationContext) -> Sd3ModelLoaderOutput:
|
def invoke(self, context: InvocationContext) -> Sd3ModelLoaderOutput:
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
from invokeai.app.invocations.baseinvocation import BaseInvocation, BaseInvocationOutput, invocation, invocation_output
|
from invokeai.app.invocations.baseinvocation import BaseInvocation, BaseInvocationOutput, invocation, invocation_output
|
||||||
from invokeai.app.invocations.fields import FieldDescriptions, InputField, OutputField, UIType
|
from invokeai.app.invocations.fields import FieldDescriptions, InputField, OutputField
|
||||||
from invokeai.app.invocations.model import CLIPField, ModelIdentifierField, UNetField, VAEField
|
from invokeai.app.invocations.model import CLIPField, ModelIdentifierField, UNetField, VAEField
|
||||||
from invokeai.app.services.shared.invocation_context import InvocationContext
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
||||||
from invokeai.backend.model_manager.taxonomy import SubModelType
|
from invokeai.backend.model_manager.taxonomy import BaseModelType, ModelType, SubModelType
|
||||||
|
|
||||||
|
|
||||||
@invocation_output("sdxl_model_loader_output")
|
@invocation_output("sdxl_model_loader_output")
|
||||||
@@ -29,7 +29,9 @@ class SDXLModelLoaderInvocation(BaseInvocation):
|
|||||||
"""Loads an sdxl base model, outputting its submodels."""
|
"""Loads an sdxl base model, outputting its submodels."""
|
||||||
|
|
||||||
model: ModelIdentifierField = InputField(
|
model: ModelIdentifierField = InputField(
|
||||||
description=FieldDescriptions.sdxl_main_model, ui_type=UIType.SDXLMainModel
|
description=FieldDescriptions.sdxl_main_model,
|
||||||
|
ui_model_base=BaseModelType.StableDiffusionXL,
|
||||||
|
ui_model_type=ModelType.Main,
|
||||||
)
|
)
|
||||||
# TODO: precision?
|
# TODO: precision?
|
||||||
|
|
||||||
@@ -67,7 +69,9 @@ class SDXLRefinerModelLoaderInvocation(BaseInvocation):
|
|||||||
"""Loads an sdxl refiner model, outputting its submodels."""
|
"""Loads an sdxl refiner model, outputting its submodels."""
|
||||||
|
|
||||||
model: ModelIdentifierField = InputField(
|
model: ModelIdentifierField = InputField(
|
||||||
description=FieldDescriptions.sdxl_refiner_model, ui_type=UIType.SDXLRefinerModel
|
description=FieldDescriptions.sdxl_refiner_model,
|
||||||
|
ui_model_base=BaseModelType.StableDiffusionXLRefiner,
|
||||||
|
ui_model_type=ModelType.Main,
|
||||||
)
|
)
|
||||||
# TODO: precision?
|
# TODO: precision?
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ from invokeai.app.invocations.fields import (
|
|||||||
FieldDescriptions,
|
FieldDescriptions,
|
||||||
ImageField,
|
ImageField,
|
||||||
InputField,
|
InputField,
|
||||||
UIType,
|
|
||||||
WithBoard,
|
WithBoard,
|
||||||
WithMetadata,
|
WithMetadata,
|
||||||
)
|
)
|
||||||
@@ -19,6 +18,7 @@ from invokeai.app.invocations.model import ModelIdentifierField
|
|||||||
from invokeai.app.invocations.primitives import ImageOutput
|
from invokeai.app.invocations.primitives import ImageOutput
|
||||||
from invokeai.app.services.session_processor.session_processor_common import CanceledException
|
from invokeai.app.services.session_processor.session_processor_common import CanceledException
|
||||||
from invokeai.app.services.shared.invocation_context import InvocationContext
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
||||||
|
from invokeai.backend.model_manager.taxonomy import ModelType
|
||||||
from invokeai.backend.spandrel_image_to_image_model import SpandrelImageToImageModel
|
from invokeai.backend.spandrel_image_to_image_model import SpandrelImageToImageModel
|
||||||
from invokeai.backend.tiles.tiles import calc_tiles_min_overlap
|
from invokeai.backend.tiles.tiles import calc_tiles_min_overlap
|
||||||
from invokeai.backend.tiles.utils import TBLR, Tile
|
from invokeai.backend.tiles.utils import TBLR, Tile
|
||||||
@@ -33,7 +33,7 @@ class SpandrelImageToImageInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|||||||
image_to_image_model: ModelIdentifierField = InputField(
|
image_to_image_model: ModelIdentifierField = InputField(
|
||||||
title="Image-to-Image Model",
|
title="Image-to-Image Model",
|
||||||
description=FieldDescriptions.spandrel_image_to_image_model,
|
description=FieldDescriptions.spandrel_image_to_image_model,
|
||||||
ui_type=UIType.SpandrelImageToImageModel,
|
ui_model_type=ModelType.SpandrelImageToImage,
|
||||||
)
|
)
|
||||||
tile_size: int = InputField(
|
tile_size: int = InputField(
|
||||||
default=512, description="The tile size for tiled image-to-image. Set to 0 to disable tiling."
|
default=512, description="The tile size for tiled image-to-image. Set to 0 to disable tiling."
|
||||||
|
|||||||
@@ -8,11 +8,12 @@ from invokeai.app.invocations.baseinvocation import (
|
|||||||
invocation,
|
invocation,
|
||||||
invocation_output,
|
invocation_output,
|
||||||
)
|
)
|
||||||
from invokeai.app.invocations.fields import FieldDescriptions, ImageField, InputField, OutputField, UIType
|
from invokeai.app.invocations.fields import FieldDescriptions, ImageField, InputField, OutputField
|
||||||
from invokeai.app.invocations.model import ModelIdentifierField
|
from invokeai.app.invocations.model import ModelIdentifierField
|
||||||
from invokeai.app.invocations.util import validate_begin_end_step, validate_weights
|
from invokeai.app.invocations.util import validate_begin_end_step, validate_weights
|
||||||
from invokeai.app.services.shared.invocation_context import InvocationContext
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
||||||
from invokeai.app.util.controlnet_utils import CONTROLNET_RESIZE_VALUES
|
from invokeai.app.util.controlnet_utils import CONTROLNET_RESIZE_VALUES
|
||||||
|
from invokeai.backend.model_manager.taxonomy import BaseModelType, ModelType
|
||||||
|
|
||||||
|
|
||||||
class T2IAdapterField(BaseModel):
|
class T2IAdapterField(BaseModel):
|
||||||
@@ -60,7 +61,8 @@ class T2IAdapterInvocation(BaseInvocation):
|
|||||||
description="The T2I-Adapter model.",
|
description="The T2I-Adapter model.",
|
||||||
title="T2I-Adapter Model",
|
title="T2I-Adapter Model",
|
||||||
ui_order=-1,
|
ui_order=-1,
|
||||||
ui_type=UIType.T2IAdapterModel,
|
ui_model_base=[BaseModelType.StableDiffusion1, BaseModelType.StableDiffusionXL],
|
||||||
|
ui_model_type=ModelType.T2IAdapter,
|
||||||
)
|
)
|
||||||
weight: Union[float, list[float]] = InputField(
|
weight: Union[float, list[float]] = InputField(
|
||||||
default=1, ge=0, description="The weight given to the T2I-Adapter", title="Weight"
|
default=1, ge=0, description="The weight given to the T2I-Adapter", title="Weight"
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ from abc import ABC, abstractmethod
|
|||||||
from typing import Any, Coroutine, Optional
|
from typing import Any, Coroutine, Optional
|
||||||
|
|
||||||
from invokeai.app.services.session_queue.session_queue_common import (
|
from invokeai.app.services.session_queue.session_queue_common import (
|
||||||
|
QUEUE_ITEM_STATUS,
|
||||||
Batch,
|
Batch,
|
||||||
BatchStatus,
|
BatchStatus,
|
||||||
CancelAllExceptCurrentResult,
|
CancelAllExceptCurrentResult,
|
||||||
@@ -22,6 +23,7 @@ from invokeai.app.services.session_queue.session_queue_common import (
|
|||||||
SessionQueueStatus,
|
SessionQueueStatus,
|
||||||
)
|
)
|
||||||
from invokeai.app.services.shared.graph import GraphExecutionState
|
from invokeai.app.services.shared.graph import GraphExecutionState
|
||||||
|
from invokeai.app.services.shared.pagination import CursorPaginatedResults
|
||||||
from invokeai.app.services.shared.sqlite.sqlite_common import SQLiteDirection
|
from invokeai.app.services.shared.sqlite.sqlite_common import SQLiteDirection
|
||||||
|
|
||||||
|
|
||||||
@@ -135,6 +137,19 @@ class SessionQueueBase(ABC):
|
|||||||
"""Deletes all queue items except in-progress items"""
|
"""Deletes all queue items except in-progress items"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def list_queue_items(
|
||||||
|
self,
|
||||||
|
queue_id: str,
|
||||||
|
limit: int,
|
||||||
|
priority: int,
|
||||||
|
cursor: Optional[int] = None,
|
||||||
|
status: Optional[QUEUE_ITEM_STATUS] = None,
|
||||||
|
destination: Optional[str] = None,
|
||||||
|
) -> CursorPaginatedResults[SessionQueueItem]:
|
||||||
|
"""Gets a page of session queue items. Do not remove."""
|
||||||
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def list_all_queue_items(
|
def list_all_queue_items(
|
||||||
self,
|
self,
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ from invokeai.app.services.session_queue.session_queue_common import (
|
|||||||
prepare_values_to_insert,
|
prepare_values_to_insert,
|
||||||
)
|
)
|
||||||
from invokeai.app.services.shared.graph import GraphExecutionState
|
from invokeai.app.services.shared.graph import GraphExecutionState
|
||||||
|
from invokeai.app.services.shared.pagination import CursorPaginatedResults
|
||||||
from invokeai.app.services.shared.sqlite.sqlite_common import SQLiteDirection
|
from invokeai.app.services.shared.sqlite.sqlite_common import SQLiteDirection
|
||||||
from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase
|
from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase
|
||||||
|
|
||||||
@@ -588,6 +589,59 @@ class SqliteSessionQueue(SessionQueueBase):
|
|||||||
)
|
)
|
||||||
return self.get_queue_item(item_id)
|
return self.get_queue_item(item_id)
|
||||||
|
|
||||||
|
def list_queue_items(
|
||||||
|
self,
|
||||||
|
queue_id: str,
|
||||||
|
limit: int,
|
||||||
|
priority: int,
|
||||||
|
cursor: Optional[int] = None,
|
||||||
|
status: Optional[QUEUE_ITEM_STATUS] = None,
|
||||||
|
destination: Optional[str] = None,
|
||||||
|
) -> CursorPaginatedResults[SessionQueueItem]:
|
||||||
|
with self._db.transaction() as cursor_:
|
||||||
|
item_id = cursor
|
||||||
|
query = """--sql
|
||||||
|
SELECT *
|
||||||
|
FROM session_queue
|
||||||
|
WHERE queue_id = ?
|
||||||
|
"""
|
||||||
|
params: list[Union[str, int]] = [queue_id]
|
||||||
|
|
||||||
|
if status is not None:
|
||||||
|
query += """--sql
|
||||||
|
AND status = ?
|
||||||
|
"""
|
||||||
|
params.append(status)
|
||||||
|
|
||||||
|
if destination is not None:
|
||||||
|
query += """---sql
|
||||||
|
AND destination = ?
|
||||||
|
"""
|
||||||
|
params.append(destination)
|
||||||
|
|
||||||
|
if item_id is not None:
|
||||||
|
query += """--sql
|
||||||
|
AND (priority < ?) OR (priority = ? AND item_id > ?)
|
||||||
|
"""
|
||||||
|
params.extend([priority, priority, item_id])
|
||||||
|
|
||||||
|
query += """--sql
|
||||||
|
ORDER BY
|
||||||
|
priority DESC,
|
||||||
|
item_id ASC
|
||||||
|
LIMIT ?
|
||||||
|
"""
|
||||||
|
params.append(limit + 1)
|
||||||
|
cursor_.execute(query, params)
|
||||||
|
results = cast(list[sqlite3.Row], cursor_.fetchall())
|
||||||
|
items = [SessionQueueItem.queue_item_from_dict(dict(result)) for result in results]
|
||||||
|
has_more = False
|
||||||
|
if len(items) > limit:
|
||||||
|
# remove the extra item
|
||||||
|
items.pop()
|
||||||
|
has_more = True
|
||||||
|
return CursorPaginatedResults(items=items, limit=limit, has_more=has_more)
|
||||||
|
|
||||||
def list_all_queue_items(
|
def list_all_queue_items(
|
||||||
self,
|
self,
|
||||||
queue_id: str,
|
queue_id: str,
|
||||||
|
|||||||
@@ -207,15 +207,24 @@ class IPAdapterPlusXL(IPAdapterPlus):
|
|||||||
|
|
||||||
|
|
||||||
def load_ip_adapter_tensors(ip_adapter_ckpt_path: pathlib.Path, device: str) -> IPAdapterStateDict:
|
def load_ip_adapter_tensors(ip_adapter_ckpt_path: pathlib.Path, device: str) -> IPAdapterStateDict:
|
||||||
state_dict: IPAdapterStateDict = {"ip_adapter": {}, "image_proj": {}}
|
state_dict: IPAdapterStateDict = {
|
||||||
|
"ip_adapter": {},
|
||||||
|
"image_proj": {},
|
||||||
|
"adapter_modules": {}, # added for noobai-mark-ipa
|
||||||
|
"image_proj_model": {}, # added for noobai-mark-ipa
|
||||||
|
}
|
||||||
|
|
||||||
if ip_adapter_ckpt_path.suffix == ".safetensors":
|
if ip_adapter_ckpt_path.suffix == ".safetensors":
|
||||||
model = safetensors.torch.load_file(ip_adapter_ckpt_path, device=device)
|
model = safetensors.torch.load_file(ip_adapter_ckpt_path, device=device)
|
||||||
for key in model.keys():
|
for key in model.keys():
|
||||||
if key.startswith("image_proj."):
|
if key.startswith("ip_adapter."):
|
||||||
state_dict["image_proj"][key.replace("image_proj.", "")] = model[key]
|
|
||||||
elif key.startswith("ip_adapter."):
|
|
||||||
state_dict["ip_adapter"][key.replace("ip_adapter.", "")] = model[key]
|
state_dict["ip_adapter"][key.replace("ip_adapter.", "")] = model[key]
|
||||||
|
elif key.startswith("image_proj_model."):
|
||||||
|
state_dict["image_proj_model"][key.replace("image_proj_model.", "")] = model[key]
|
||||||
|
elif key.startswith("image_proj."):
|
||||||
|
state_dict["image_proj"][key.replace("image_proj.", "")] = model[key]
|
||||||
|
elif key.startswith("adapter_modules."):
|
||||||
|
state_dict["adapter_modules"][key.replace("adapter_modules.", "")] = model[key]
|
||||||
else:
|
else:
|
||||||
raise RuntimeError(f"Encountered unexpected IP Adapter state dict key: '{key}'.")
|
raise RuntimeError(f"Encountered unexpected IP Adapter state dict key: '{key}'.")
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -5,11 +5,7 @@ import torch
|
|||||||
from diffusers.configuration_utils import ConfigMixin, register_to_config
|
from diffusers.configuration_utils import ConfigMixin, register_to_config
|
||||||
from diffusers.loaders.single_file_model import FromOriginalModelMixin
|
from diffusers.loaders.single_file_model import FromOriginalModelMixin
|
||||||
from diffusers.models.attention_processor import AttentionProcessor, AttnProcessor
|
from diffusers.models.attention_processor import AttentionProcessor, AttnProcessor
|
||||||
from diffusers.models.controlnets.controlnet import (
|
from diffusers.models.controlnet import ControlNetConditioningEmbedding, ControlNetOutput, zero_module
|
||||||
ControlNetConditioningEmbedding,
|
|
||||||
ControlNetOutput,
|
|
||||||
zero_module,
|
|
||||||
)
|
|
||||||
from diffusers.models.embeddings import (
|
from diffusers.models.embeddings import (
|
||||||
TextImageProjection,
|
TextImageProjection,
|
||||||
TextImageTimeEmbedding,
|
TextImageTimeEmbedding,
|
||||||
@@ -779,15 +775,7 @@ class ControlNetModel(ModelMixin, ConfigMixin, FromOriginalModelMixin):
|
|||||||
|
|
||||||
|
|
||||||
diffusers.ControlNetModel = ControlNetModel
|
diffusers.ControlNetModel = ControlNetModel
|
||||||
# Patch both the new and legacy module paths for compatibility
|
diffusers.models.controlnet.ControlNetModel = ControlNetModel
|
||||||
try:
|
|
||||||
diffusers.models.controlnets.controlnet.ControlNetModel = ControlNetModel
|
|
||||||
except Exception:
|
|
||||||
# Fallback for environments still exposing the legacy path
|
|
||||||
try:
|
|
||||||
diffusers.models.controlnet.ControlNetModel = ControlNetModel
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
# patch LoRACompatibleConv to use original Conv2D forward function
|
# patch LoRACompatibleConv to use original Conv2D forward function
|
||||||
|
|||||||
@@ -131,7 +131,8 @@
|
|||||||
"notInstalled": "Non $t(common.installed)",
|
"notInstalled": "Non $t(common.installed)",
|
||||||
"prevPage": "Pagina precedente",
|
"prevPage": "Pagina precedente",
|
||||||
"nextPage": "Pagina successiva",
|
"nextPage": "Pagina successiva",
|
||||||
"resetToDefaults": "Ripristina impostazioni predefinite"
|
"resetToDefaults": "Ripristina impostazioni predefinite",
|
||||||
|
"crop": "Ritaglia"
|
||||||
},
|
},
|
||||||
"gallery": {
|
"gallery": {
|
||||||
"galleryImageSize": "Dimensione dell'immagine",
|
"galleryImageSize": "Dimensione dell'immagine",
|
||||||
@@ -278,6 +279,14 @@
|
|||||||
"selectVideoTab": {
|
"selectVideoTab": {
|
||||||
"title": "Seleziona la scheda Video",
|
"title": "Seleziona la scheda Video",
|
||||||
"desc": "Seleziona la scheda Video."
|
"desc": "Seleziona la scheda Video."
|
||||||
|
},
|
||||||
|
"promptHistoryPrev": {
|
||||||
|
"title": "Prompt precedente nella cronologia",
|
||||||
|
"desc": "Quando il prompt è attivo, passa al prompt precedente (più vecchio) nella cronologia."
|
||||||
|
},
|
||||||
|
"promptHistoryNext": {
|
||||||
|
"title": "Prossimo prompt nella cronologia",
|
||||||
|
"desc": "Quando il prompt è attivo, passa al prompt successivo (più recente) nella cronologia."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"hotkeys": "Tasti di scelta rapida",
|
"hotkeys": "Tasti di scelta rapida",
|
||||||
@@ -875,7 +884,8 @@
|
|||||||
"video": "Video",
|
"video": "Video",
|
||||||
"resolution": "Risoluzione",
|
"resolution": "Risoluzione",
|
||||||
"downloadImage": "Scarica l'immagine",
|
"downloadImage": "Scarica l'immagine",
|
||||||
"showOptionsPanel": "Mostra pannello laterale (O o T)"
|
"showOptionsPanel": "Mostra pannello laterale (O o T)",
|
||||||
|
"startingFrameImageAspectRatioWarning": "Le proporzioni dell'immagine non corrispondono alle proporzioni del video ({{videoAspectRatio}}). Ciò potrebbe causare ritagli imprevisti durante la generazione del video."
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"models": "Modelli",
|
"models": "Modelli",
|
||||||
@@ -2095,7 +2105,10 @@
|
|||||||
"generateFromImage": "Genera prompt dall'immagine",
|
"generateFromImage": "Genera prompt dall'immagine",
|
||||||
"resultTitle": "Espansione del prompt completata",
|
"resultTitle": "Espansione del prompt completata",
|
||||||
"resultSubtitle": "Scegli come gestire il prompt espanso:",
|
"resultSubtitle": "Scegli come gestire il prompt espanso:",
|
||||||
"insert": "Inserisci"
|
"insert": "Inserisci",
|
||||||
|
"noPromptHistory": "Nessuna cronologia di prompt registrata.",
|
||||||
|
"noMatchingPrompts": "Nessun prompt corrispondente nella cronologia.",
|
||||||
|
"toSwitchBetweenPrompts": "per passare da un prompt all'altro."
|
||||||
},
|
},
|
||||||
"controlLayers": {
|
"controlLayers": {
|
||||||
"addLayer": "Aggiungi Livello",
|
"addLayer": "Aggiungi Livello",
|
||||||
@@ -2791,7 +2804,8 @@
|
|||||||
"watchRecentReleaseVideos": "Guarda i video su questa versione",
|
"watchRecentReleaseVideos": "Guarda i video su questa versione",
|
||||||
"items": [
|
"items": [
|
||||||
"Seleziona oggetto v2: selezione degli oggetti migliorata con input di punti e riquadri o prompt di testo.",
|
"Seleziona oggetto v2: selezione degli oggetti migliorata con input di punti e riquadri o prompt di testo.",
|
||||||
"Regolazioni del livello raster: regola facilmente la luminosità, il contrasto, la saturazione, le curve e altro ancora del livello."
|
"Regolazioni del livello raster: regola facilmente la luminosità, il contrasto, la saturazione, le curve e altro ancora del livello.",
|
||||||
|
"Cronologia prompt: rivedi e richiama rapidamente i tuoi ultimi 100 prompt."
|
||||||
],
|
],
|
||||||
"watchUiUpdatesOverview": "Guarda la panoramica degli aggiornamenti dell'interfaccia utente"
|
"watchUiUpdatesOverview": "Guarda la panoramica degli aggiornamenti dell'interfaccia utente"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ export const RasterLayerAdjustmentsPanel = memo(() => {
|
|||||||
}
|
}
|
||||||
const rect = adapter.transformer.getRelativeRect();
|
const rect = adapter.transformer.getRelativeRect();
|
||||||
try {
|
try {
|
||||||
await adapter.renderer.rasterize({ rect, replaceObjects: true });
|
await adapter.renderer.rasterize({ rect, replaceObjects: true, attrs: { opacity: 1 } });
|
||||||
// Clear adjustments after baking
|
// Clear adjustments after baking
|
||||||
dispatch(rasterLayerAdjustmentsSet({ entityIdentifier, adjustments: null }));
|
dispatch(rasterLayerAdjustmentsSet({ entityIdentifier, adjustments: null }));
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ const modelPaneSx: SystemStyleObject = {
|
|||||||
},
|
},
|
||||||
h: 'full',
|
h: 'full',
|
||||||
minWidth: '300px',
|
minWidth: '300px',
|
||||||
|
overflow: 'auto',
|
||||||
};
|
};
|
||||||
|
|
||||||
export const ModelPane = memo(() => {
|
export const ModelPane = memo(() => {
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ export const ModelView = memo(({ modelConfig }: Props) => {
|
|||||||
}, [modelConfig.base, modelConfig.type]);
|
}, [modelConfig.base, modelConfig.type]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Flex flexDir="column" gap={4}>
|
<Flex flexDir="column" gap={4} h="full">
|
||||||
<ModelHeader modelConfig={modelConfig}>
|
<ModelHeader modelConfig={modelConfig}>
|
||||||
{modelConfig.format === 'checkpoint' && modelConfig.type === 'main' && (
|
{modelConfig.format === 'checkpoint' && modelConfig.type === 'main' && (
|
||||||
<ModelConvertButton modelConfig={modelConfig} />
|
<ModelConvertButton modelConfig={modelConfig} />
|
||||||
@@ -48,7 +48,7 @@ export const ModelView = memo(({ modelConfig }: Props) => {
|
|||||||
<ModelEditButton />
|
<ModelEditButton />
|
||||||
</ModelHeader>
|
</ModelHeader>
|
||||||
<Divider />
|
<Divider />
|
||||||
<Flex flexDir="column" h="full" gap={4}>
|
<Flex flexDir="column" gap={4}>
|
||||||
<Box>
|
<Box>
|
||||||
<SimpleGrid columns={2} gap={4}>
|
<SimpleGrid columns={2} gap={4}>
|
||||||
<ModelAttrView label={t('modelManager.baseModel')} value={modelConfig.base} />
|
<ModelAttrView label={t('modelManager.baseModel')} value={modelConfig.base} />
|
||||||
|
|||||||
@@ -1,14 +1,10 @@
|
|||||||
import { FloatFieldInput } from 'features/nodes/components/flow/nodes/Invocation/fields/FloatField/FloatFieldInput';
|
import { FloatFieldInput } from 'features/nodes/components/flow/nodes/Invocation/fields/FloatField/FloatFieldInput';
|
||||||
import { FloatFieldInputAndSlider } from 'features/nodes/components/flow/nodes/Invocation/fields/FloatField/FloatFieldInputAndSlider';
|
import { FloatFieldInputAndSlider } from 'features/nodes/components/flow/nodes/Invocation/fields/FloatField/FloatFieldInputAndSlider';
|
||||||
import { FloatFieldSlider } from 'features/nodes/components/flow/nodes/Invocation/fields/FloatField/FloatFieldSlider';
|
import { FloatFieldSlider } from 'features/nodes/components/flow/nodes/Invocation/fields/FloatField/FloatFieldSlider';
|
||||||
import ChatGPT4oModelFieldInputComponent from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ChatGPT4oModelFieldInputComponent';
|
|
||||||
import { FloatFieldCollectionInputComponent } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/FloatFieldCollectionInputComponent';
|
import { FloatFieldCollectionInputComponent } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/FloatFieldCollectionInputComponent';
|
||||||
import { FloatGeneratorFieldInputComponent } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/FloatGeneratorFieldComponent';
|
import { FloatGeneratorFieldInputComponent } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/FloatGeneratorFieldComponent';
|
||||||
import FluxKontextModelFieldInputComponent from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/FluxKontextModelFieldInputComponent';
|
|
||||||
import { ImageFieldCollectionInputComponent } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ImageFieldCollectionInputComponent';
|
import { ImageFieldCollectionInputComponent } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ImageFieldCollectionInputComponent';
|
||||||
import { ImageGeneratorFieldInputComponent } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ImageGeneratorFieldComponent';
|
import { ImageGeneratorFieldInputComponent } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ImageGeneratorFieldComponent';
|
||||||
import Imagen3ModelFieldInputComponent from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/Imagen3ModelFieldInputComponent';
|
|
||||||
import Imagen4ModelFieldInputComponent from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/Imagen4ModelFieldInputComponent';
|
|
||||||
import { IntegerFieldCollectionInputComponent } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/IntegerFieldCollectionInputComponent';
|
import { IntegerFieldCollectionInputComponent } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/IntegerFieldCollectionInputComponent';
|
||||||
import { IntegerGeneratorFieldInputComponent } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/IntegerGeneratorFieldComponent';
|
import { IntegerGeneratorFieldInputComponent } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/IntegerGeneratorFieldComponent';
|
||||||
import ModelIdentifierFieldInputComponent from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelIdentifierFieldInputComponent';
|
import ModelIdentifierFieldInputComponent from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelIdentifierFieldInputComponent';
|
||||||
@@ -27,22 +23,8 @@ import {
|
|||||||
isBoardFieldInputTemplate,
|
isBoardFieldInputTemplate,
|
||||||
isBooleanFieldInputInstance,
|
isBooleanFieldInputInstance,
|
||||||
isBooleanFieldInputTemplate,
|
isBooleanFieldInputTemplate,
|
||||||
isChatGPT4oModelFieldInputInstance,
|
|
||||||
isChatGPT4oModelFieldInputTemplate,
|
|
||||||
isCLIPEmbedModelFieldInputInstance,
|
|
||||||
isCLIPEmbedModelFieldInputTemplate,
|
|
||||||
isCLIPGEmbedModelFieldInputInstance,
|
|
||||||
isCLIPGEmbedModelFieldInputTemplate,
|
|
||||||
isCLIPLEmbedModelFieldInputInstance,
|
|
||||||
isCLIPLEmbedModelFieldInputTemplate,
|
|
||||||
isCogView4MainModelFieldInputInstance,
|
|
||||||
isCogView4MainModelFieldInputTemplate,
|
|
||||||
isColorFieldInputInstance,
|
isColorFieldInputInstance,
|
||||||
isColorFieldInputTemplate,
|
isColorFieldInputTemplate,
|
||||||
isControlLoRAModelFieldInputInstance,
|
|
||||||
isControlLoRAModelFieldInputTemplate,
|
|
||||||
isControlNetModelFieldInputInstance,
|
|
||||||
isControlNetModelFieldInputTemplate,
|
|
||||||
isEnumFieldInputInstance,
|
isEnumFieldInputInstance,
|
||||||
isEnumFieldInputTemplate,
|
isEnumFieldInputTemplate,
|
||||||
isFloatFieldCollectionInputInstance,
|
isFloatFieldCollectionInputInstance,
|
||||||
@@ -51,68 +33,28 @@ import {
|
|||||||
isFloatFieldInputTemplate,
|
isFloatFieldInputTemplate,
|
||||||
isFloatGeneratorFieldInputInstance,
|
isFloatGeneratorFieldInputInstance,
|
||||||
isFloatGeneratorFieldInputTemplate,
|
isFloatGeneratorFieldInputTemplate,
|
||||||
isFluxKontextModelFieldInputInstance,
|
|
||||||
isFluxKontextModelFieldInputTemplate,
|
|
||||||
isFluxMainModelFieldInputInstance,
|
|
||||||
isFluxMainModelFieldInputTemplate,
|
|
||||||
isFluxReduxModelFieldInputInstance,
|
|
||||||
isFluxReduxModelFieldInputTemplate,
|
|
||||||
isFluxVAEModelFieldInputInstance,
|
|
||||||
isFluxVAEModelFieldInputTemplate,
|
|
||||||
isImageFieldCollectionInputInstance,
|
isImageFieldCollectionInputInstance,
|
||||||
isImageFieldCollectionInputTemplate,
|
isImageFieldCollectionInputTemplate,
|
||||||
isImageFieldInputInstance,
|
isImageFieldInputInstance,
|
||||||
isImageFieldInputTemplate,
|
isImageFieldInputTemplate,
|
||||||
isImageGeneratorFieldInputInstance,
|
isImageGeneratorFieldInputInstance,
|
||||||
isImageGeneratorFieldInputTemplate,
|
isImageGeneratorFieldInputTemplate,
|
||||||
isImagen3ModelFieldInputInstance,
|
|
||||||
isImagen3ModelFieldInputTemplate,
|
|
||||||
isImagen4ModelFieldInputInstance,
|
|
||||||
isImagen4ModelFieldInputTemplate,
|
|
||||||
isIntegerFieldCollectionInputInstance,
|
isIntegerFieldCollectionInputInstance,
|
||||||
isIntegerFieldCollectionInputTemplate,
|
isIntegerFieldCollectionInputTemplate,
|
||||||
isIntegerFieldInputInstance,
|
isIntegerFieldInputInstance,
|
||||||
isIntegerFieldInputTemplate,
|
isIntegerFieldInputTemplate,
|
||||||
isIntegerGeneratorFieldInputInstance,
|
isIntegerGeneratorFieldInputInstance,
|
||||||
isIntegerGeneratorFieldInputTemplate,
|
isIntegerGeneratorFieldInputTemplate,
|
||||||
isIPAdapterModelFieldInputInstance,
|
|
||||||
isIPAdapterModelFieldInputTemplate,
|
|
||||||
isLLaVAModelFieldInputInstance,
|
|
||||||
isLLaVAModelFieldInputTemplate,
|
|
||||||
isLoRAModelFieldInputInstance,
|
|
||||||
isLoRAModelFieldInputTemplate,
|
|
||||||
isMainModelFieldInputInstance,
|
|
||||||
isMainModelFieldInputTemplate,
|
|
||||||
isModelIdentifierFieldInputInstance,
|
isModelIdentifierFieldInputInstance,
|
||||||
isModelIdentifierFieldInputTemplate,
|
isModelIdentifierFieldInputTemplate,
|
||||||
isRunwayModelFieldInputInstance,
|
|
||||||
isRunwayModelFieldInputTemplate,
|
|
||||||
isSchedulerFieldInputInstance,
|
isSchedulerFieldInputInstance,
|
||||||
isSchedulerFieldInputTemplate,
|
isSchedulerFieldInputTemplate,
|
||||||
isSD3MainModelFieldInputInstance,
|
|
||||||
isSD3MainModelFieldInputTemplate,
|
|
||||||
isSDXLMainModelFieldInputInstance,
|
|
||||||
isSDXLMainModelFieldInputTemplate,
|
|
||||||
isSDXLRefinerModelFieldInputInstance,
|
|
||||||
isSDXLRefinerModelFieldInputTemplate,
|
|
||||||
isSigLipModelFieldInputInstance,
|
|
||||||
isSigLipModelFieldInputTemplate,
|
|
||||||
isSpandrelImageToImageModelFieldInputInstance,
|
|
||||||
isSpandrelImageToImageModelFieldInputTemplate,
|
|
||||||
isStringFieldCollectionInputInstance,
|
isStringFieldCollectionInputInstance,
|
||||||
isStringFieldCollectionInputTemplate,
|
isStringFieldCollectionInputTemplate,
|
||||||
isStringFieldInputInstance,
|
isStringFieldInputInstance,
|
||||||
isStringFieldInputTemplate,
|
isStringFieldInputTemplate,
|
||||||
isStringGeneratorFieldInputInstance,
|
isStringGeneratorFieldInputInstance,
|
||||||
isStringGeneratorFieldInputTemplate,
|
isStringGeneratorFieldInputTemplate,
|
||||||
isT2IAdapterModelFieldInputInstance,
|
|
||||||
isT2IAdapterModelFieldInputTemplate,
|
|
||||||
isT5EncoderModelFieldInputInstance,
|
|
||||||
isT5EncoderModelFieldInputTemplate,
|
|
||||||
isVAEModelFieldInputInstance,
|
|
||||||
isVAEModelFieldInputTemplate,
|
|
||||||
isVeo3ModelFieldInputInstance,
|
|
||||||
isVeo3ModelFieldInputTemplate,
|
|
||||||
} from 'features/nodes/types/field';
|
} from 'features/nodes/types/field';
|
||||||
import type { NodeFieldElement } from 'features/nodes/types/workflow';
|
import type { NodeFieldElement } from 'features/nodes/types/workflow';
|
||||||
import { memo } from 'react';
|
import { memo } from 'react';
|
||||||
@@ -121,33 +63,10 @@ import { assert } from 'tsafe';
|
|||||||
|
|
||||||
import BoardFieldInputComponent from './inputs/BoardFieldInputComponent';
|
import BoardFieldInputComponent from './inputs/BoardFieldInputComponent';
|
||||||
import BooleanFieldInputComponent from './inputs/BooleanFieldInputComponent';
|
import BooleanFieldInputComponent from './inputs/BooleanFieldInputComponent';
|
||||||
import CLIPEmbedModelFieldInputComponent from './inputs/CLIPEmbedModelFieldInputComponent';
|
|
||||||
import CLIPGEmbedModelFieldInputComponent from './inputs/CLIPGEmbedModelFieldInputComponent';
|
|
||||||
import CLIPLEmbedModelFieldInputComponent from './inputs/CLIPLEmbedModelFieldInputComponent';
|
|
||||||
import CogView4MainModelFieldInputComponent from './inputs/CogView4MainModelFieldInputComponent';
|
|
||||||
import ColorFieldInputComponent from './inputs/ColorFieldInputComponent';
|
import ColorFieldInputComponent from './inputs/ColorFieldInputComponent';
|
||||||
import ControlLoRAModelFieldInputComponent from './inputs/ControlLoraModelFieldInputComponent';
|
|
||||||
import ControlNetModelFieldInputComponent from './inputs/ControlNetModelFieldInputComponent';
|
|
||||||
import EnumFieldInputComponent from './inputs/EnumFieldInputComponent';
|
import EnumFieldInputComponent from './inputs/EnumFieldInputComponent';
|
||||||
import FluxMainModelFieldInputComponent from './inputs/FluxMainModelFieldInputComponent';
|
|
||||||
import FluxReduxModelFieldInputComponent from './inputs/FluxReduxModelFieldInputComponent';
|
|
||||||
import FluxVAEModelFieldInputComponent from './inputs/FluxVAEModelFieldInputComponent';
|
|
||||||
import ImageFieldInputComponent from './inputs/ImageFieldInputComponent';
|
import ImageFieldInputComponent from './inputs/ImageFieldInputComponent';
|
||||||
import IPAdapterModelFieldInputComponent from './inputs/IPAdapterModelFieldInputComponent';
|
|
||||||
import LLaVAModelFieldInputComponent from './inputs/LLaVAModelFieldInputComponent';
|
|
||||||
import LoRAModelFieldInputComponent from './inputs/LoRAModelFieldInputComponent';
|
|
||||||
import MainModelFieldInputComponent from './inputs/MainModelFieldInputComponent';
|
|
||||||
import RefinerModelFieldInputComponent from './inputs/RefinerModelFieldInputComponent';
|
|
||||||
import RunwayModelFieldInputComponent from './inputs/RunwayModelFieldInputComponent';
|
|
||||||
import SchedulerFieldInputComponent from './inputs/SchedulerFieldInputComponent';
|
import SchedulerFieldInputComponent from './inputs/SchedulerFieldInputComponent';
|
||||||
import SD3MainModelFieldInputComponent from './inputs/SD3MainModelFieldInputComponent';
|
|
||||||
import SDXLMainModelFieldInputComponent from './inputs/SDXLMainModelFieldInputComponent';
|
|
||||||
import SigLipModelFieldInputComponent from './inputs/SigLipModelFieldInputComponent';
|
|
||||||
import SpandrelImageToImageModelFieldInputComponent from './inputs/SpandrelImageToImageModelFieldInputComponent';
|
|
||||||
import T2IAdapterModelFieldInputComponent from './inputs/T2IAdapterModelFieldInputComponent';
|
|
||||||
import T5EncoderModelFieldInputComponent from './inputs/T5EncoderModelFieldInputComponent';
|
|
||||||
import VAEModelFieldInputComponent from './inputs/VAEModelFieldInputComponent';
|
|
||||||
import Veo3ModelFieldInputComponent from './inputs/Veo3ModelFieldInputComponent';
|
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
nodeId: string;
|
nodeId: string;
|
||||||
@@ -287,13 +206,6 @@ export const InputFieldRenderer = memo(({ nodeId, fieldName, settings }: Props)
|
|||||||
return <BoardFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
return <BoardFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isMainModelFieldInputTemplate(template)) {
|
|
||||||
if (!isMainModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <MainModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isModelIdentifierFieldInputTemplate(template)) {
|
if (isModelIdentifierFieldInputTemplate(template)) {
|
||||||
if (!isModelIdentifierFieldInputInstance(field)) {
|
if (!isModelIdentifierFieldInputInstance(field)) {
|
||||||
return null;
|
return null;
|
||||||
@@ -301,159 +213,6 @@ export const InputFieldRenderer = memo(({ nodeId, fieldName, settings }: Props)
|
|||||||
return <ModelIdentifierFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
return <ModelIdentifierFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isSDXLRefinerModelFieldInputTemplate(template)) {
|
|
||||||
if (!isSDXLRefinerModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <RefinerModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isVAEModelFieldInputTemplate(template)) {
|
|
||||||
if (!isVAEModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <VAEModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isT5EncoderModelFieldInputTemplate(template)) {
|
|
||||||
if (!isT5EncoderModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <T5EncoderModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
if (isCLIPEmbedModelFieldInputTemplate(template)) {
|
|
||||||
if (!isCLIPEmbedModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <CLIPEmbedModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isCLIPLEmbedModelFieldInputTemplate(template)) {
|
|
||||||
if (!isCLIPLEmbedModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <CLIPLEmbedModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isCLIPGEmbedModelFieldInputTemplate(template)) {
|
|
||||||
if (!isCLIPGEmbedModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <CLIPGEmbedModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isControlLoRAModelFieldInputTemplate(template)) {
|
|
||||||
if (!isControlLoRAModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <ControlLoRAModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isLLaVAModelFieldInputTemplate(template)) {
|
|
||||||
if (!isLLaVAModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <LLaVAModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isFluxVAEModelFieldInputTemplate(template)) {
|
|
||||||
if (!isFluxVAEModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <FluxVAEModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isLoRAModelFieldInputTemplate(template)) {
|
|
||||||
if (!isLoRAModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <LoRAModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isControlNetModelFieldInputTemplate(template)) {
|
|
||||||
if (!isControlNetModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <ControlNetModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isIPAdapterModelFieldInputTemplate(template)) {
|
|
||||||
if (!isIPAdapterModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <IPAdapterModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isT2IAdapterModelFieldInputTemplate(template)) {
|
|
||||||
if (!isT2IAdapterModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <T2IAdapterModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isSpandrelImageToImageModelFieldInputTemplate(template)) {
|
|
||||||
if (!isSpandrelImageToImageModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <SpandrelImageToImageModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isSigLipModelFieldInputTemplate(template)) {
|
|
||||||
if (!isSigLipModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <SigLipModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isFluxReduxModelFieldInputTemplate(template)) {
|
|
||||||
if (!isFluxReduxModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <FluxReduxModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isImagen3ModelFieldInputTemplate(template)) {
|
|
||||||
if (!isImagen3ModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <Imagen3ModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isImagen4ModelFieldInputTemplate(template)) {
|
|
||||||
if (!isImagen4ModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <Imagen4ModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isFluxKontextModelFieldInputTemplate(template)) {
|
|
||||||
if (!isFluxKontextModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <FluxKontextModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isChatGPT4oModelFieldInputTemplate(template)) {
|
|
||||||
if (!isChatGPT4oModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <ChatGPT4oModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isVeo3ModelFieldInputTemplate(template)) {
|
|
||||||
if (!isVeo3ModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <Veo3ModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isRunwayModelFieldInputTemplate(template)) {
|
|
||||||
if (!isRunwayModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <RunwayModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isColorFieldInputTemplate(template)) {
|
if (isColorFieldInputTemplate(template)) {
|
||||||
if (!isColorFieldInputInstance(field)) {
|
if (!isColorFieldInputInstance(field)) {
|
||||||
return null;
|
return null;
|
||||||
@@ -461,34 +220,6 @@ export const InputFieldRenderer = memo(({ nodeId, fieldName, settings }: Props)
|
|||||||
return <ColorFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
return <ColorFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isFluxMainModelFieldInputTemplate(template)) {
|
|
||||||
if (!isFluxMainModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <FluxMainModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isSD3MainModelFieldInputTemplate(template)) {
|
|
||||||
if (!isSD3MainModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <SD3MainModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isCogView4MainModelFieldInputTemplate(template)) {
|
|
||||||
if (!isCogView4MainModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <CogView4MainModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isSDXLMainModelFieldInputTemplate(template)) {
|
|
||||||
if (!isSDXLMainModelFieldInputInstance(field)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return <SDXLMainModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isSchedulerFieldInputTemplate(template)) {
|
if (isSchedulerFieldInputTemplate(template)) {
|
||||||
if (!isSchedulerFieldInputInstance(field)) {
|
if (!isSchedulerFieldInputInstance(field)) {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldCLIPEmbedValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { CLIPEmbedModelFieldInputInstance, CLIPEmbedModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useCLIPEmbedModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { CLIPEmbedModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
type Props = FieldComponentProps<CLIPEmbedModelFieldInputInstance, CLIPEmbedModelFieldInputTemplate>;
|
|
||||||
|
|
||||||
const CLIPEmbedModelFieldInputComponent = (props: Props) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
const [modelConfigs, { isLoading }] = useCLIPEmbedModels();
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: CLIPEmbedModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldCLIPEmbedValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(CLIPEmbedModelFieldInputComponent);
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldCLIPGEmbedValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { CLIPGEmbedModelFieldInputInstance, CLIPGEmbedModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useCLIPEmbedModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import { type CLIPGEmbedModelConfig, isCLIPGEmbedModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
type Props = FieldComponentProps<CLIPGEmbedModelFieldInputInstance, CLIPGEmbedModelFieldInputTemplate>;
|
|
||||||
|
|
||||||
const CLIPGEmbedModelFieldInputComponent = (props: Props) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
const [modelConfigs, { isLoading }] = useCLIPEmbedModels();
|
|
||||||
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: CLIPGEmbedModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldCLIPGEmbedValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs.filter((config) => isCLIPGEmbedModelConfig(config))}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(CLIPGEmbedModelFieldInputComponent);
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldCLIPLEmbedValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { CLIPLEmbedModelFieldInputInstance, CLIPLEmbedModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useCLIPEmbedModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import { type CLIPLEmbedModelConfig, isCLIPLEmbedModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
type Props = FieldComponentProps<CLIPLEmbedModelFieldInputInstance, CLIPLEmbedModelFieldInputTemplate>;
|
|
||||||
|
|
||||||
const CLIPLEmbedModelFieldInputComponent = (props: Props) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
const [modelConfigs, { isLoading }] = useCLIPEmbedModels();
|
|
||||||
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: CLIPLEmbedModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldCLIPLEmbedValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs.filter((config) => isCLIPLEmbedModelConfig(config))}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(CLIPLEmbedModelFieldInputComponent);
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldChatGPT4oModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { ChatGPT4oModelFieldInputInstance, ChatGPT4oModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useChatGPT4oModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { ApiModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
const ChatGPT4oModelFieldInputComponent = (
|
|
||||||
props: FieldComponentProps<ChatGPT4oModelFieldInputInstance, ChatGPT4oModelFieldInputTemplate>
|
|
||||||
) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
|
|
||||||
const [modelConfigs, { isLoading }] = useChatGPT4oModels();
|
|
||||||
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: ApiModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldChatGPT4oModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(ChatGPT4oModelFieldInputComponent);
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
import { Combobox, Flex, FormControl } from '@invoke-ai/ui-library';
|
|
||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { useGroupedModelCombobox } from 'common/hooks/useGroupedModelCombobox';
|
|
||||||
import { fieldMainModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import { NO_DRAG_CLASS, NO_WHEEL_CLASS } from 'features/nodes/types/constants';
|
|
||||||
import type {
|
|
||||||
CogView4MainModelFieldInputInstance,
|
|
||||||
CogView4MainModelFieldInputTemplate,
|
|
||||||
} from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useCogView4Models } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { MainModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
type Props = FieldComponentProps<CogView4MainModelFieldInputInstance, CogView4MainModelFieldInputTemplate>;
|
|
||||||
|
|
||||||
const CogView4MainModelFieldInputComponent = (props: Props) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
const [modelConfigs, { isLoading }] = useCogView4Models();
|
|
||||||
const _onChange = useCallback(
|
|
||||||
(value: MainModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldMainModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
const { options, value, onChange, placeholder, noOptionsMessage } = useGroupedModelCombobox({
|
|
||||||
modelConfigs,
|
|
||||||
onChange: _onChange,
|
|
||||||
isLoading,
|
|
||||||
selectedModel: field.value,
|
|
||||||
});
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Flex w="full" alignItems="center" gap={2}>
|
|
||||||
<FormControl
|
|
||||||
className={`${NO_WHEEL_CLASS} ${NO_DRAG_CLASS}`}
|
|
||||||
isDisabled={!options.length}
|
|
||||||
isInvalid={!value && props.fieldTemplate.required}
|
|
||||||
>
|
|
||||||
<Combobox
|
|
||||||
value={value}
|
|
||||||
placeholder={placeholder}
|
|
||||||
options={options}
|
|
||||||
onChange={onChange}
|
|
||||||
noOptionsMessage={noOptionsMessage}
|
|
||||||
/>
|
|
||||||
</FormControl>
|
|
||||||
</Flex>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(CogView4MainModelFieldInputComponent);
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldControlLoRAModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type {
|
|
||||||
ControlLoRAModelFieldInputInstance,
|
|
||||||
ControlLoRAModelFieldInputTemplate,
|
|
||||||
} from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useControlLoRAModel } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { ControlLoRAModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
type Props = FieldComponentProps<ControlLoRAModelFieldInputInstance, ControlLoRAModelFieldInputTemplate>;
|
|
||||||
|
|
||||||
const ControlLoRAModelFieldInputComponent = (props: Props) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
const [modelConfigs, { isLoading }] = useControlLoRAModel();
|
|
||||||
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: ControlLoRAModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldControlLoRAModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(ControlLoRAModelFieldInputComponent);
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldControlNetModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { ControlNetModelFieldInputInstance, ControlNetModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useControlNetModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { ControlNetModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
type Props = FieldComponentProps<ControlNetModelFieldInputInstance, ControlNetModelFieldInputTemplate>;
|
|
||||||
|
|
||||||
const ControlNetModelFieldInputComponent = (props: Props) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
const [modelConfigs, { isLoading }] = useControlNetModels();
|
|
||||||
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: ControlNetModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldControlNetModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(ControlNetModelFieldInputComponent);
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldFluxKontextModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type {
|
|
||||||
FluxKontextModelFieldInputInstance,
|
|
||||||
FluxKontextModelFieldInputTemplate,
|
|
||||||
} from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useFluxKontextModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { ApiModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
const FluxKontextModelFieldInputComponent = (
|
|
||||||
props: FieldComponentProps<FluxKontextModelFieldInputInstance, FluxKontextModelFieldInputTemplate>
|
|
||||||
) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
|
|
||||||
const [modelConfigs, { isLoading }] = useFluxKontextModels();
|
|
||||||
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: ApiModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldFluxKontextModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(FluxKontextModelFieldInputComponent);
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldMainModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { FluxMainModelFieldInputInstance, FluxMainModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useFluxModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { MainModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
type Props = FieldComponentProps<FluxMainModelFieldInputInstance, FluxMainModelFieldInputTemplate>;
|
|
||||||
|
|
||||||
const FluxMainModelFieldInputComponent = (props: Props) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
const [modelConfigs, { isLoading }] = useFluxModels();
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: MainModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldMainModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(FluxMainModelFieldInputComponent);
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldFluxReduxModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { FluxReduxModelFieldInputInstance, FluxReduxModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useFluxReduxModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { FLUXReduxModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
const FluxReduxModelFieldInputComponent = (
|
|
||||||
props: FieldComponentProps<FluxReduxModelFieldInputInstance, FluxReduxModelFieldInputTemplate>
|
|
||||||
) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
|
|
||||||
const [modelConfigs, { isLoading }] = useFluxReduxModels();
|
|
||||||
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: FLUXReduxModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldFluxReduxModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(FluxReduxModelFieldInputComponent);
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldFluxVAEModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { FluxVAEModelFieldInputInstance, FluxVAEModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useFluxVAEModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { VAEModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
type Props = FieldComponentProps<FluxVAEModelFieldInputInstance, FluxVAEModelFieldInputTemplate>;
|
|
||||||
|
|
||||||
const FluxVAEModelFieldInputComponent = (props: Props) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
const [modelConfigs, { isLoading }] = useFluxVAEModels();
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: VAEModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldFluxVAEModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(FluxVAEModelFieldInputComponent);
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldIPAdapterModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { IPAdapterModelFieldInputInstance, IPAdapterModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useIPAdapterModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { IPAdapterModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
const IPAdapterModelFieldInputComponent = (
|
|
||||||
props: FieldComponentProps<IPAdapterModelFieldInputInstance, IPAdapterModelFieldInputTemplate>
|
|
||||||
) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
const [modelConfigs, { isLoading }] = useIPAdapterModels();
|
|
||||||
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: IPAdapterModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldIPAdapterModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(IPAdapterModelFieldInputComponent);
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldImagen3ModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { Imagen3ModelFieldInputInstance, Imagen3ModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useImagen3Models } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { ApiModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
const Imagen3ModelFieldInputComponent = (
|
|
||||||
props: FieldComponentProps<Imagen3ModelFieldInputInstance, Imagen3ModelFieldInputTemplate>
|
|
||||||
) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
|
|
||||||
const [modelConfigs, { isLoading }] = useImagen3Models();
|
|
||||||
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: ApiModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldImagen3ModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(Imagen3ModelFieldInputComponent);
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldImagen4ModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { Imagen4ModelFieldInputInstance, Imagen4ModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useImagen4Models } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { ApiModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
const Imagen4ModelFieldInputComponent = (
|
|
||||||
props: FieldComponentProps<Imagen4ModelFieldInputInstance, Imagen4ModelFieldInputTemplate>
|
|
||||||
) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
|
|
||||||
const [modelConfigs, { isLoading }] = useImagen4Models();
|
|
||||||
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: ApiModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldImagen4ModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(Imagen4ModelFieldInputComponent);
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldLLaVAModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { LLaVAModelFieldInputInstance, LLaVAModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useLLaVAModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { LlavaOnevisionConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
type Props = FieldComponentProps<LLaVAModelFieldInputInstance, LLaVAModelFieldInputTemplate>;
|
|
||||||
|
|
||||||
const LLaVAModelFieldInputComponent = (props: Props) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
const [modelConfigs, { isLoading }] = useLLaVAModels();
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: LlavaOnevisionConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldLLaVAModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(LLaVAModelFieldInputComponent);
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldLoRAModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { LoRAModelFieldInputInstance, LoRAModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useLoRAModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { LoRAModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
type Props = FieldComponentProps<LoRAModelFieldInputInstance, LoRAModelFieldInputTemplate>;
|
|
||||||
|
|
||||||
const LoRAModelFieldInputComponent = (props: Props) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
const [modelConfigs, { isLoading }] = useLoRAModels();
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: LoRAModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldLoRAModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(LoRAModelFieldInputComponent);
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldMainModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { MainModelFieldInputInstance, MainModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useNonSDXLMainModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { MainModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
type Props = FieldComponentProps<MainModelFieldInputInstance, MainModelFieldInputTemplate>;
|
|
||||||
|
|
||||||
const MainModelFieldInputComponent = (props: Props) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
const [modelConfigs, { isLoading }] = useNonSDXLMainModels();
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: MainModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldMainModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(MainModelFieldInputComponent);
|
|
||||||
@@ -12,7 +12,7 @@ import type { FieldComponentProps } from './types';
|
|||||||
type Props = FieldComponentProps<ModelIdentifierFieldInputInstance, ModelIdentifierFieldInputTemplate>;
|
type Props = FieldComponentProps<ModelIdentifierFieldInputInstance, ModelIdentifierFieldInputTemplate>;
|
||||||
|
|
||||||
const ModelIdentifierFieldInputComponent = (props: Props) => {
|
const ModelIdentifierFieldInputComponent = (props: Props) => {
|
||||||
const { nodeId, field } = props;
|
const { nodeId, field, fieldTemplate } = props;
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
const { data, isLoading } = useGetModelConfigsQuery();
|
const { data, isLoading } = useGetModelConfigsQuery();
|
||||||
const onChange = useCallback(
|
const onChange = useCallback(
|
||||||
@@ -36,8 +36,31 @@ const ModelIdentifierFieldInputComponent = (props: Props) => {
|
|||||||
return EMPTY_ARRAY;
|
return EMPTY_ARRAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
return modelConfigsAdapterSelectors.selectAll(data);
|
if (!fieldTemplate.ui_model_base && !fieldTemplate.ui_model_type) {
|
||||||
}, [data]);
|
return modelConfigsAdapterSelectors.selectAll(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return modelConfigsAdapterSelectors.selectAll(data).filter((config) => {
|
||||||
|
if (fieldTemplate.ui_model_base && !fieldTemplate.ui_model_base.includes(config.base)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (fieldTemplate.ui_model_type && !fieldTemplate.ui_model_type.includes(config.type)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
fieldTemplate.ui_model_variant &&
|
||||||
|
'variant' in config &&
|
||||||
|
config.variant &&
|
||||||
|
!fieldTemplate.ui_model_variant.includes(config.variant)
|
||||||
|
) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (fieldTemplate.ui_model_format && !fieldTemplate.ui_model_format.includes(config.format)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}, [data, fieldTemplate]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ModelFieldCombobox
|
<ModelFieldCombobox
|
||||||
|
|||||||
@@ -1,47 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldRefinerModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type {
|
|
||||||
SDXLRefinerModelFieldInputInstance,
|
|
||||||
SDXLRefinerModelFieldInputTemplate,
|
|
||||||
} from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useRefinerModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { MainModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
type Props = FieldComponentProps<SDXLRefinerModelFieldInputInstance, SDXLRefinerModelFieldInputTemplate>;
|
|
||||||
|
|
||||||
const RefinerModelFieldInputComponent = (props: Props) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
const [modelConfigs, { isLoading }] = useRefinerModels();
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: MainModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldRefinerModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(RefinerModelFieldInputComponent);
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldRunwayModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { RunwayModelFieldInputInstance, RunwayModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useRunwayModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { VideoApiModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
const RunwayModelFieldInputComponent = (
|
|
||||||
props: FieldComponentProps<RunwayModelFieldInputInstance, RunwayModelFieldInputTemplate>
|
|
||||||
) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
|
|
||||||
const [modelConfigs, { isLoading }] = useRunwayModels();
|
|
||||||
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: VideoApiModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldRunwayModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(RunwayModelFieldInputComponent);
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldMainModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { SD3MainModelFieldInputInstance, SD3MainModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useSD3Models } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { MainModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
type Props = FieldComponentProps<SD3MainModelFieldInputInstance, SD3MainModelFieldInputTemplate>;
|
|
||||||
|
|
||||||
const SD3MainModelFieldInputComponent = (props: Props) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
const [modelConfigs, { isLoading }] = useSD3Models();
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: MainModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldMainModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(SD3MainModelFieldInputComponent);
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldMainModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { SDXLMainModelFieldInputInstance, SDXLMainModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useSDXLModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { MainModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
type Props = FieldComponentProps<SDXLMainModelFieldInputInstance, SDXLMainModelFieldInputTemplate>;
|
|
||||||
|
|
||||||
const SDXLMainModelFieldInputComponent = (props: Props) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
const [modelConfigs, { isLoading }] = useSDXLModels();
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: MainModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldMainModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(SDXLMainModelFieldInputComponent);
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldSigLipModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { SigLipModelFieldInputInstance, SigLipModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useSigLipModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { SigLipModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
const SigLipModelFieldInputComponent = (
|
|
||||||
props: FieldComponentProps<SigLipModelFieldInputInstance, SigLipModelFieldInputTemplate>
|
|
||||||
) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
|
|
||||||
const [modelConfigs, { isLoading }] = useSigLipModels();
|
|
||||||
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: SigLipModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldSigLipModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(SigLipModelFieldInputComponent);
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldSpandrelImageToImageModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type {
|
|
||||||
SpandrelImageToImageModelFieldInputInstance,
|
|
||||||
SpandrelImageToImageModelFieldInputTemplate,
|
|
||||||
} from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useSpandrelImageToImageModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { SpandrelImageToImageModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
const SpandrelImageToImageModelFieldInputComponent = (
|
|
||||||
props: FieldComponentProps<SpandrelImageToImageModelFieldInputInstance, SpandrelImageToImageModelFieldInputTemplate>
|
|
||||||
) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
|
|
||||||
const [modelConfigs, { isLoading }] = useSpandrelImageToImageModels();
|
|
||||||
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: SpandrelImageToImageModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldSpandrelImageToImageModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(SpandrelImageToImageModelFieldInputComponent);
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldT2IAdapterModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { T2IAdapterModelFieldInputInstance, T2IAdapterModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useT2IAdapterModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { T2IAdapterModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
const T2IAdapterModelFieldInputComponent = (
|
|
||||||
props: FieldComponentProps<T2IAdapterModelFieldInputInstance, T2IAdapterModelFieldInputTemplate>
|
|
||||||
) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
|
|
||||||
const [modelConfigs, { isLoading }] = useT2IAdapterModels();
|
|
||||||
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: T2IAdapterModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldT2IAdapterModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(T2IAdapterModelFieldInputComponent);
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldT5EncoderValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { T5EncoderModelFieldInputInstance, T5EncoderModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useT5EncoderModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { T5EncoderBnbQuantizedLlmInt8bModelConfig, T5EncoderModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
type Props = FieldComponentProps<T5EncoderModelFieldInputInstance, T5EncoderModelFieldInputTemplate>;
|
|
||||||
|
|
||||||
const T5EncoderModelFieldInputComponent = (props: Props) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
const [modelConfigs, { isLoading }] = useT5EncoderModels();
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: T5EncoderBnbQuantizedLlmInt8bModelConfig | T5EncoderModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldT5EncoderValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(T5EncoderModelFieldInputComponent);
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldVaeModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { VAEModelFieldInputInstance, VAEModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useVAEModels } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { VAEModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
type Props = FieldComponentProps<VAEModelFieldInputInstance, VAEModelFieldInputTemplate>;
|
|
||||||
|
|
||||||
const VAEModelFieldInputComponent = (props: Props) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
const [modelConfigs, { isLoading }] = useVAEModels();
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: VAEModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldVaeModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(VAEModelFieldInputComponent);
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
|
||||||
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
|
|
||||||
import { fieldVeo3ModelValueChanged } from 'features/nodes/store/nodesSlice';
|
|
||||||
import type { Veo3ModelFieldInputInstance, Veo3ModelFieldInputTemplate } from 'features/nodes/types/field';
|
|
||||||
import { memo, useCallback } from 'react';
|
|
||||||
import { useVeo3Models } from 'services/api/hooks/modelsByType';
|
|
||||||
import type { VideoApiModelConfig } from 'services/api/types';
|
|
||||||
|
|
||||||
import type { FieldComponentProps } from './types';
|
|
||||||
|
|
||||||
const Veo3ModelFieldInputComponent = (
|
|
||||||
props: FieldComponentProps<Veo3ModelFieldInputInstance, Veo3ModelFieldInputTemplate>
|
|
||||||
) => {
|
|
||||||
const { nodeId, field } = props;
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
|
|
||||||
const [modelConfigs, { isLoading }] = useVeo3Models();
|
|
||||||
|
|
||||||
const onChange = useCallback(
|
|
||||||
(value: VideoApiModelConfig | null) => {
|
|
||||||
if (!value) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch(
|
|
||||||
fieldVeo3ModelValueChanged({
|
|
||||||
nodeId,
|
|
||||||
fieldName: field.name,
|
|
||||||
value,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[dispatch, field.name, nodeId]
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ModelFieldCombobox
|
|
||||||
value={field.value}
|
|
||||||
modelConfigs={modelConfigs}
|
|
||||||
isLoadingConfigs={isLoading}
|
|
||||||
onChange={onChange}
|
|
||||||
required={props.fieldTemplate.required}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(Veo3ModelFieldInputComponent);
|
|
||||||
@@ -2,20 +2,16 @@ import { createSelector } from '@reduxjs/toolkit';
|
|||||||
import { useAppSelector } from 'app/store/storeHooks';
|
import { useAppSelector } from 'app/store/storeHooks';
|
||||||
import { useInvocationNodeContext } from 'features/nodes/components/flow/nodes/Invocation/context';
|
import { useInvocationNodeContext } from 'features/nodes/components/flow/nodes/Invocation/context';
|
||||||
import type { FieldInputTemplate } from 'features/nodes/types/field';
|
import type { FieldInputTemplate } from 'features/nodes/types/field';
|
||||||
import { isSingleOrCollection } from 'features/nodes/types/field';
|
import { isSingleOrCollection, isStatefulFieldType } from 'features/nodes/types/field';
|
||||||
import { TEMPLATE_BUILDER_MAP } from 'features/nodes/util/schema/buildFieldInputTemplate';
|
|
||||||
import { useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
|
|
||||||
const isConnectionInputField = (field: FieldInputTemplate) => {
|
const isConnectionInputField = (field: FieldInputTemplate) => {
|
||||||
return (
|
return (field.input === 'connection' && !isSingleOrCollection(field.type)) || !isStatefulFieldType(field.type);
|
||||||
(field.input === 'connection' && !isSingleOrCollection(field.type)) || !(field.type.name in TEMPLATE_BUILDER_MAP)
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const isAnyOrDirectInputField = (field: FieldInputTemplate) => {
|
const isAnyOrDirectInputField = (field: FieldInputTemplate) => {
|
||||||
return (
|
return (
|
||||||
(['any', 'direct'].includes(field.input) || isSingleOrCollection(field.type)) &&
|
(['any', 'direct'].includes(field.input) || isSingleOrCollection(field.type)) && isStatefulFieldType(field.type)
|
||||||
field.type.name in TEMPLATE_BUILDER_MAP
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -24,90 +24,44 @@ import { SHARED_NODE_PROPERTIES } from 'features/nodes/types/constants';
|
|||||||
import type {
|
import type {
|
||||||
BoardFieldValue,
|
BoardFieldValue,
|
||||||
BooleanFieldValue,
|
BooleanFieldValue,
|
||||||
ChatGPT4oModelFieldValue,
|
|
||||||
CLIPEmbedModelFieldValue,
|
|
||||||
CLIPGEmbedModelFieldValue,
|
|
||||||
CLIPLEmbedModelFieldValue,
|
|
||||||
ColorFieldValue,
|
ColorFieldValue,
|
||||||
ControlLoRAModelFieldValue,
|
|
||||||
ControlNetModelFieldValue,
|
|
||||||
EnumFieldValue,
|
EnumFieldValue,
|
||||||
FieldValue,
|
FieldValue,
|
||||||
FloatFieldValue,
|
FloatFieldValue,
|
||||||
FloatGeneratorFieldValue,
|
FloatGeneratorFieldValue,
|
||||||
FluxKontextModelFieldValue,
|
|
||||||
FluxReduxModelFieldValue,
|
|
||||||
FluxVAEModelFieldValue,
|
|
||||||
ImageFieldCollectionValue,
|
ImageFieldCollectionValue,
|
||||||
ImageFieldValue,
|
ImageFieldValue,
|
||||||
ImageGeneratorFieldValue,
|
ImageGeneratorFieldValue,
|
||||||
Imagen3ModelFieldValue,
|
|
||||||
Imagen4ModelFieldValue,
|
|
||||||
IntegerFieldCollectionValue,
|
IntegerFieldCollectionValue,
|
||||||
IntegerFieldValue,
|
IntegerFieldValue,
|
||||||
IntegerGeneratorFieldValue,
|
IntegerGeneratorFieldValue,
|
||||||
IPAdapterModelFieldValue,
|
|
||||||
LLaVAModelFieldValue,
|
|
||||||
LoRAModelFieldValue,
|
|
||||||
MainModelFieldValue,
|
|
||||||
ModelIdentifierFieldValue,
|
ModelIdentifierFieldValue,
|
||||||
RunwayModelFieldValue,
|
|
||||||
SchedulerFieldValue,
|
SchedulerFieldValue,
|
||||||
SDXLRefinerModelFieldValue,
|
|
||||||
SigLipModelFieldValue,
|
|
||||||
SpandrelImageToImageModelFieldValue,
|
|
||||||
StatefulFieldValue,
|
StatefulFieldValue,
|
||||||
StringFieldCollectionValue,
|
StringFieldCollectionValue,
|
||||||
StringFieldValue,
|
StringFieldValue,
|
||||||
StringGeneratorFieldValue,
|
StringGeneratorFieldValue,
|
||||||
T2IAdapterModelFieldValue,
|
|
||||||
T5EncoderModelFieldValue,
|
|
||||||
VAEModelFieldValue,
|
|
||||||
Veo3ModelFieldValue,
|
|
||||||
} from 'features/nodes/types/field';
|
} from 'features/nodes/types/field';
|
||||||
import {
|
import {
|
||||||
zBoardFieldValue,
|
zBoardFieldValue,
|
||||||
zBooleanFieldValue,
|
zBooleanFieldValue,
|
||||||
zChatGPT4oModelFieldValue,
|
|
||||||
zCLIPEmbedModelFieldValue,
|
|
||||||
zCLIPGEmbedModelFieldValue,
|
|
||||||
zCLIPLEmbedModelFieldValue,
|
|
||||||
zColorFieldValue,
|
zColorFieldValue,
|
||||||
zControlLoRAModelFieldValue,
|
|
||||||
zControlNetModelFieldValue,
|
|
||||||
zEnumFieldValue,
|
zEnumFieldValue,
|
||||||
zFloatFieldCollectionValue,
|
zFloatFieldCollectionValue,
|
||||||
zFloatFieldValue,
|
zFloatFieldValue,
|
||||||
zFloatGeneratorFieldValue,
|
zFloatGeneratorFieldValue,
|
||||||
zFluxKontextModelFieldValue,
|
|
||||||
zFluxReduxModelFieldValue,
|
|
||||||
zFluxVAEModelFieldValue,
|
|
||||||
zImageFieldCollectionValue,
|
zImageFieldCollectionValue,
|
||||||
zImageFieldValue,
|
zImageFieldValue,
|
||||||
zImageGeneratorFieldValue,
|
zImageGeneratorFieldValue,
|
||||||
zImagen3ModelFieldValue,
|
|
||||||
zImagen4ModelFieldValue,
|
|
||||||
zIntegerFieldCollectionValue,
|
zIntegerFieldCollectionValue,
|
||||||
zIntegerFieldValue,
|
zIntegerFieldValue,
|
||||||
zIntegerGeneratorFieldValue,
|
zIntegerGeneratorFieldValue,
|
||||||
zIPAdapterModelFieldValue,
|
|
||||||
zLLaVAModelFieldValue,
|
|
||||||
zLoRAModelFieldValue,
|
|
||||||
zMainModelFieldValue,
|
|
||||||
zModelIdentifierFieldValue,
|
zModelIdentifierFieldValue,
|
||||||
zRunwayModelFieldValue,
|
|
||||||
zSchedulerFieldValue,
|
zSchedulerFieldValue,
|
||||||
zSDXLRefinerModelFieldValue,
|
|
||||||
zSigLipModelFieldValue,
|
|
||||||
zSpandrelImageToImageModelFieldValue,
|
|
||||||
zStatefulFieldValue,
|
zStatefulFieldValue,
|
||||||
zStringFieldCollectionValue,
|
zStringFieldCollectionValue,
|
||||||
zStringFieldValue,
|
zStringFieldValue,
|
||||||
zStringGeneratorFieldValue,
|
zStringGeneratorFieldValue,
|
||||||
zT2IAdapterModelFieldValue,
|
|
||||||
zT5EncoderModelFieldValue,
|
|
||||||
zVAEModelFieldValue,
|
|
||||||
zVeo3ModelFieldValue,
|
|
||||||
} from 'features/nodes/types/field';
|
} from 'features/nodes/types/field';
|
||||||
import type { AnyEdge, AnyNode } from 'features/nodes/types/invocation';
|
import type { AnyEdge, AnyNode } from 'features/nodes/types/invocation';
|
||||||
import { isInvocationNode, isNotesNode } from 'features/nodes/types/invocation';
|
import { isInvocationNode, isNotesNode } from 'features/nodes/types/invocation';
|
||||||
@@ -493,81 +447,9 @@ const slice = createSlice({
|
|||||||
fieldColorValueChanged: (state, action: FieldValueAction<ColorFieldValue>) => {
|
fieldColorValueChanged: (state, action: FieldValueAction<ColorFieldValue>) => {
|
||||||
fieldValueReducer(state, action, zColorFieldValue);
|
fieldValueReducer(state, action, zColorFieldValue);
|
||||||
},
|
},
|
||||||
fieldMainModelValueChanged: (state, action: FieldValueAction<MainModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zMainModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldModelIdentifierValueChanged: (state, action: FieldValueAction<ModelIdentifierFieldValue>) => {
|
fieldModelIdentifierValueChanged: (state, action: FieldValueAction<ModelIdentifierFieldValue>) => {
|
||||||
fieldValueReducer(state, action, zModelIdentifierFieldValue);
|
fieldValueReducer(state, action, zModelIdentifierFieldValue);
|
||||||
},
|
},
|
||||||
fieldRefinerModelValueChanged: (state, action: FieldValueAction<SDXLRefinerModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zSDXLRefinerModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldVaeModelValueChanged: (state, action: FieldValueAction<VAEModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zVAEModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldLoRAModelValueChanged: (state, action: FieldValueAction<LoRAModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zLoRAModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldLLaVAModelValueChanged: (state, action: FieldValueAction<LLaVAModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zLLaVAModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldControlNetModelValueChanged: (state, action: FieldValueAction<ControlNetModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zControlNetModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldIPAdapterModelValueChanged: (state, action: FieldValueAction<IPAdapterModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zIPAdapterModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldT2IAdapterModelValueChanged: (state, action: FieldValueAction<T2IAdapterModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zT2IAdapterModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldSpandrelImageToImageModelValueChanged: (
|
|
||||||
state,
|
|
||||||
action: FieldValueAction<SpandrelImageToImageModelFieldValue>
|
|
||||||
) => {
|
|
||||||
fieldValueReducer(state, action, zSpandrelImageToImageModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldT5EncoderValueChanged: (state, action: FieldValueAction<T5EncoderModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zT5EncoderModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldCLIPEmbedValueChanged: (state, action: FieldValueAction<CLIPEmbedModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zCLIPEmbedModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldCLIPLEmbedValueChanged: (state, action: FieldValueAction<CLIPLEmbedModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zCLIPLEmbedModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldCLIPGEmbedValueChanged: (state, action: FieldValueAction<CLIPGEmbedModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zCLIPGEmbedModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldControlLoRAModelValueChanged: (state, action: FieldValueAction<ControlLoRAModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zControlLoRAModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldFluxVAEModelValueChanged: (state, action: FieldValueAction<FluxVAEModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zFluxVAEModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldSigLipModelValueChanged: (state, action: FieldValueAction<SigLipModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zSigLipModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldFluxReduxModelValueChanged: (state, action: FieldValueAction<FluxReduxModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zFluxReduxModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldImagen3ModelValueChanged: (state, action: FieldValueAction<Imagen3ModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zImagen3ModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldImagen4ModelValueChanged: (state, action: FieldValueAction<Imagen4ModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zImagen4ModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldChatGPT4oModelValueChanged: (state, action: FieldValueAction<ChatGPT4oModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zChatGPT4oModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldVeo3ModelValueChanged: (state, action: FieldValueAction<Veo3ModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zVeo3ModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldRunwayModelValueChanged: (state, action: FieldValueAction<RunwayModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zRunwayModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldFluxKontextModelValueChanged: (state, action: FieldValueAction<FluxKontextModelFieldValue>) => {
|
|
||||||
fieldValueReducer(state, action, zFluxKontextModelFieldValue);
|
|
||||||
},
|
|
||||||
fieldEnumModelValueChanged: (state, action: FieldValueAction<EnumFieldValue>) => {
|
fieldEnumModelValueChanged: (state, action: FieldValueAction<EnumFieldValue>) => {
|
||||||
fieldValueReducer(state, action, zEnumFieldValue);
|
fieldValueReducer(state, action, zEnumFieldValue);
|
||||||
},
|
},
|
||||||
@@ -706,45 +588,22 @@ export const {
|
|||||||
fieldBoardValueChanged,
|
fieldBoardValueChanged,
|
||||||
fieldBooleanValueChanged,
|
fieldBooleanValueChanged,
|
||||||
fieldColorValueChanged,
|
fieldColorValueChanged,
|
||||||
fieldControlNetModelValueChanged,
|
|
||||||
fieldEnumModelValueChanged,
|
fieldEnumModelValueChanged,
|
||||||
fieldImageValueChanged,
|
fieldImageValueChanged,
|
||||||
fieldImageCollectionValueChanged,
|
fieldImageCollectionValueChanged,
|
||||||
fieldIPAdapterModelValueChanged,
|
|
||||||
fieldT2IAdapterModelValueChanged,
|
|
||||||
fieldSpandrelImageToImageModelValueChanged,
|
|
||||||
fieldLabelChanged,
|
fieldLabelChanged,
|
||||||
fieldLoRAModelValueChanged,
|
|
||||||
fieldLLaVAModelValueChanged,
|
|
||||||
fieldModelIdentifierValueChanged,
|
fieldModelIdentifierValueChanged,
|
||||||
fieldMainModelValueChanged,
|
|
||||||
fieldIntegerValueChanged,
|
fieldIntegerValueChanged,
|
||||||
fieldFloatValueChanged,
|
fieldFloatValueChanged,
|
||||||
fieldFloatCollectionValueChanged,
|
fieldFloatCollectionValueChanged,
|
||||||
fieldIntegerCollectionValueChanged,
|
fieldIntegerCollectionValueChanged,
|
||||||
fieldRefinerModelValueChanged,
|
|
||||||
fieldSchedulerValueChanged,
|
fieldSchedulerValueChanged,
|
||||||
fieldStringValueChanged,
|
fieldStringValueChanged,
|
||||||
fieldStringCollectionValueChanged,
|
fieldStringCollectionValueChanged,
|
||||||
fieldVaeModelValueChanged,
|
|
||||||
fieldT5EncoderValueChanged,
|
|
||||||
fieldCLIPEmbedValueChanged,
|
|
||||||
fieldCLIPLEmbedValueChanged,
|
|
||||||
fieldCLIPGEmbedValueChanged,
|
|
||||||
fieldControlLoRAModelValueChanged,
|
|
||||||
fieldFluxVAEModelValueChanged,
|
|
||||||
fieldSigLipModelValueChanged,
|
|
||||||
fieldFluxReduxModelValueChanged,
|
|
||||||
fieldImagen3ModelValueChanged,
|
|
||||||
fieldImagen4ModelValueChanged,
|
|
||||||
fieldChatGPT4oModelValueChanged,
|
|
||||||
fieldFluxKontextModelValueChanged,
|
|
||||||
fieldFloatGeneratorValueChanged,
|
fieldFloatGeneratorValueChanged,
|
||||||
fieldIntegerGeneratorValueChanged,
|
fieldIntegerGeneratorValueChanged,
|
||||||
fieldStringGeneratorValueChanged,
|
fieldStringGeneratorValueChanged,
|
||||||
fieldImageGeneratorValueChanged,
|
fieldImageGeneratorValueChanged,
|
||||||
fieldVeo3ModelValueChanged,
|
|
||||||
fieldRunwayModelValueChanged,
|
|
||||||
fieldDescriptionChanged,
|
fieldDescriptionChanged,
|
||||||
nodeEditorReset,
|
nodeEditorReset,
|
||||||
nodeIsIntermediateChanged,
|
nodeIsIntermediateChanged,
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ describe(areTypesEqual.name, () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
const targetType: FieldType = {
|
const targetType: FieldType = {
|
||||||
name: 'MainModelField',
|
name: 'StringField',
|
||||||
cardinality: 'SINGLE',
|
cardinality: 'SINGLE',
|
||||||
batch: false,
|
batch: false,
|
||||||
originalType: {
|
originalType: {
|
||||||
@@ -54,7 +54,7 @@ describe(areTypesEqual.name, () => {
|
|||||||
|
|
||||||
it('should handle equal original source type and target type', () => {
|
it('should handle equal original source type and target type', () => {
|
||||||
const sourceType: FieldType = {
|
const sourceType: FieldType = {
|
||||||
name: 'MainModelField',
|
name: 'FloatField',
|
||||||
cardinality: 'SINGLE',
|
cardinality: 'SINGLE',
|
||||||
batch: false,
|
batch: false,
|
||||||
originalType: {
|
originalType: {
|
||||||
@@ -78,7 +78,7 @@ describe(areTypesEqual.name, () => {
|
|||||||
|
|
||||||
it('should handle equal original source type and original target type', () => {
|
it('should handle equal original source type and original target type', () => {
|
||||||
const sourceType: FieldType = {
|
const sourceType: FieldType = {
|
||||||
name: 'MainModelField',
|
name: 'IntegerField',
|
||||||
cardinality: 'SINGLE',
|
cardinality: 'SINGLE',
|
||||||
batch: false,
|
batch: false,
|
||||||
originalType: {
|
originalType: {
|
||||||
@@ -88,7 +88,7 @@ describe(areTypesEqual.name, () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
const targetType: FieldType = {
|
const targetType: FieldType = {
|
||||||
name: 'LoRAModelField',
|
name: 'StringField',
|
||||||
cardinality: 'SINGLE',
|
cardinality: 'SINGLE',
|
||||||
batch: false,
|
batch: false,
|
||||||
originalType: {
|
originalType: {
|
||||||
|
|||||||
@@ -247,17 +247,12 @@ export const main_model_loader: InvocationTemplate = {
|
|||||||
fieldKind: 'input',
|
fieldKind: 'input',
|
||||||
input: 'direct',
|
input: 'direct',
|
||||||
ui_hidden: false,
|
ui_hidden: false,
|
||||||
ui_type: 'MainModelField',
|
ui_model_base: ['sd-1'],
|
||||||
|
ui_model_type: ['main'],
|
||||||
type: {
|
type: {
|
||||||
name: 'MainModelField',
|
name: 'ModelIdentifierField',
|
||||||
cardinality: 'SINGLE',
|
cardinality: 'SINGLE',
|
||||||
batch: false,
|
batch: false,
|
||||||
|
|
||||||
originalType: {
|
|
||||||
name: 'ModelIdentifierField',
|
|
||||||
cardinality: 'SINGLE',
|
|
||||||
batch: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -796,7 +791,8 @@ export const schema = {
|
|||||||
input: 'direct',
|
input: 'direct',
|
||||||
orig_required: true,
|
orig_required: true,
|
||||||
ui_hidden: false,
|
ui_hidden: false,
|
||||||
ui_type: 'MainModelField',
|
ui_model_base: ['sd-1'],
|
||||||
|
ui_model_type: ['main'],
|
||||||
},
|
},
|
||||||
type: {
|
type: {
|
||||||
type: 'string',
|
type: 'string',
|
||||||
|
|||||||
@@ -12,11 +12,15 @@ import type {
|
|||||||
SchedulerField,
|
SchedulerField,
|
||||||
SubModelType,
|
SubModelType,
|
||||||
T2IAdapterField,
|
T2IAdapterField,
|
||||||
|
zClipVariantType,
|
||||||
|
zModelFormat,
|
||||||
|
zModelVariantType,
|
||||||
} from 'features/nodes/types/common';
|
} from 'features/nodes/types/common';
|
||||||
import type { Invocation, ModelType, S } from 'services/api/types';
|
import type { Invocation, S } from 'services/api/types';
|
||||||
import type { Equals, Extends } from 'tsafe';
|
import type { Equals, Extends } from 'tsafe';
|
||||||
import { assert } from 'tsafe';
|
import { assert } from 'tsafe';
|
||||||
import { describe, test } from 'vitest';
|
import { describe, test } from 'vitest';
|
||||||
|
import type z from 'zod';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* These types originate from the server and are recreated as zod schemas manually, for use at runtime.
|
* These types originate from the server and are recreated as zod schemas manually, for use at runtime.
|
||||||
@@ -38,7 +42,9 @@ describe('Common types', () => {
|
|||||||
test('ModelIdentifier', () => assert<Equals<ModelIdentifierField, S['ModelIdentifierField']>>());
|
test('ModelIdentifier', () => assert<Equals<ModelIdentifierField, S['ModelIdentifierField']>>());
|
||||||
test('ModelIdentifier', () => assert<Equals<BaseModelType, S['BaseModelType']>>());
|
test('ModelIdentifier', () => assert<Equals<BaseModelType, S['BaseModelType']>>());
|
||||||
test('ModelIdentifier', () => assert<Equals<SubModelType, S['SubModelType']>>());
|
test('ModelIdentifier', () => assert<Equals<SubModelType, S['SubModelType']>>());
|
||||||
test('ModelIdentifier', () => assert<Equals<ModelType, S['ModelType']>>());
|
test('ClipVariantType', () => assert<Equals<z.infer<typeof zClipVariantType>, S['ClipVariantType']>>());
|
||||||
|
test('ModelVariantType', () => assert<Equals<z.infer<typeof zModelVariantType>, S['ModelVariantType']>>());
|
||||||
|
test('ModelFormat', () => assert<Equals<z.infer<typeof zModelFormat>, S['ModelFormat']>>());
|
||||||
|
|
||||||
// Misc types
|
// Misc types
|
||||||
test('ProgressImage', () => assert<Equals<ProgressImage, S['ProgressImage']>>());
|
test('ProgressImage', () => assert<Equals<ProgressImage, S['ProgressImage']>>());
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ export type SchedulerField = z.infer<typeof zSchedulerField>;
|
|||||||
// #endregion
|
// #endregion
|
||||||
|
|
||||||
// #region Model-related schemas
|
// #region Model-related schemas
|
||||||
const zBaseModel = z.enum([
|
export const zBaseModelType = z.enum([
|
||||||
'any',
|
'any',
|
||||||
'sd-1',
|
'sd-1',
|
||||||
'sd-2',
|
'sd-2',
|
||||||
@@ -90,7 +90,7 @@ const zBaseModel = z.enum([
|
|||||||
'veo3',
|
'veo3',
|
||||||
'runway',
|
'runway',
|
||||||
]);
|
]);
|
||||||
export type BaseModelType = z.infer<typeof zBaseModel>;
|
export type BaseModelType = z.infer<typeof zBaseModelType>;
|
||||||
export const zMainModelBase = z.enum([
|
export const zMainModelBase = z.enum([
|
||||||
'sd-1',
|
'sd-1',
|
||||||
'sd-2',
|
'sd-2',
|
||||||
@@ -143,11 +143,31 @@ const zSubModelType = z.enum([
|
|||||||
'safety_checker',
|
'safety_checker',
|
||||||
]);
|
]);
|
||||||
export type SubModelType = z.infer<typeof zSubModelType>;
|
export type SubModelType = z.infer<typeof zSubModelType>;
|
||||||
|
|
||||||
|
export const zClipVariantType = z.enum(['large', 'gigantic']);
|
||||||
|
export const zModelVariantType = z.enum(['normal', 'inpaint', 'depth']);
|
||||||
|
export const zModelFormat = z.enum([
|
||||||
|
'omi',
|
||||||
|
'diffusers',
|
||||||
|
'checkpoint',
|
||||||
|
'lycoris',
|
||||||
|
'onnx',
|
||||||
|
'olive',
|
||||||
|
'embedding_file',
|
||||||
|
'embedding_folder',
|
||||||
|
'invokeai',
|
||||||
|
't5_encoder',
|
||||||
|
'bnb_quantized_int8b',
|
||||||
|
'bnb_quantized_nf4b',
|
||||||
|
'gguf_quantized',
|
||||||
|
'api',
|
||||||
|
]);
|
||||||
|
|
||||||
export const zModelIdentifierField = z.object({
|
export const zModelIdentifierField = z.object({
|
||||||
key: z.string().min(1),
|
key: z.string().min(1),
|
||||||
hash: z.string().min(1),
|
hash: z.string().min(1),
|
||||||
name: z.string().min(1),
|
name: z.string().min(1),
|
||||||
base: zBaseModel,
|
base: zBaseModelType,
|
||||||
type: zModelType,
|
type: zModelType,
|
||||||
submodel_type: zSubModelType.nullish(),
|
submodel_type: zSubModelType.nullish(),
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -9,7 +9,18 @@ import { assert } from 'tsafe';
|
|||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
|
|
||||||
import type { ImageField } from './common';
|
import type { ImageField } from './common';
|
||||||
import { zBoardField, zColorField, zImageField, zModelIdentifierField, zSchedulerField } from './common';
|
import {
|
||||||
|
zBaseModelType,
|
||||||
|
zBoardField,
|
||||||
|
zClipVariantType,
|
||||||
|
zColorField,
|
||||||
|
zImageField,
|
||||||
|
zModelFormat,
|
||||||
|
zModelIdentifierField,
|
||||||
|
zModelType,
|
||||||
|
zModelVariantType,
|
||||||
|
zSchedulerField,
|
||||||
|
} from './common';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* zod schemas & inferred types for fields.
|
* zod schemas & inferred types for fields.
|
||||||
@@ -60,6 +71,10 @@ const zFieldInputTemplateBase = zFieldTemplateBase.extend({
|
|||||||
default: z.undefined(),
|
default: z.undefined(),
|
||||||
ui_component: zFieldUIComponent.nullish(),
|
ui_component: zFieldUIComponent.nullish(),
|
||||||
ui_choice_labels: z.record(z.string(), z.string()).nullish(),
|
ui_choice_labels: z.record(z.string(), z.string()).nullish(),
|
||||||
|
ui_model_base: z.array(zBaseModelType).nullish(),
|
||||||
|
ui_model_type: z.array(zModelType).nullish(),
|
||||||
|
ui_model_variant: z.array(zModelVariantType.or(zClipVariantType)).nullish(),
|
||||||
|
ui_model_format: z.array(zModelFormat).nullish(),
|
||||||
});
|
});
|
||||||
const zFieldOutputTemplateBase = zFieldTemplateBase.extend({
|
const zFieldOutputTemplateBase = zFieldTemplateBase.extend({
|
||||||
fieldKind: z.literal('output'),
|
fieldKind: z.literal('output'),
|
||||||
@@ -161,118 +176,10 @@ const zColorFieldType = zFieldTypeBase.extend({
|
|||||||
name: z.literal('ColorField'),
|
name: z.literal('ColorField'),
|
||||||
originalType: zStatelessFieldType.optional(),
|
originalType: zStatelessFieldType.optional(),
|
||||||
});
|
});
|
||||||
const zMainModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('MainModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zModelIdentifierFieldType = zFieldTypeBase.extend({
|
const zModelIdentifierFieldType = zFieldTypeBase.extend({
|
||||||
name: z.literal('ModelIdentifierField'),
|
name: z.literal('ModelIdentifierField'),
|
||||||
originalType: zStatelessFieldType.optional(),
|
originalType: zStatelessFieldType.optional(),
|
||||||
});
|
});
|
||||||
const zSDXLMainModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('SDXLMainModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zSD3MainModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('SD3MainModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zCogView4MainModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('CogView4MainModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zFluxMainModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('FluxMainModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zSDXLRefinerModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('SDXLRefinerModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zVAEModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('VAEModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zLoRAModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('LoRAModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zLLaVAModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('LLaVAModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zControlNetModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('ControlNetModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zIPAdapterModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('IPAdapterModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zT2IAdapterModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('T2IAdapterModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zSpandrelImageToImageModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('SpandrelImageToImageModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zT5EncoderModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('T5EncoderModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zCLIPEmbedModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('CLIPEmbedModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zCLIPLEmbedModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('CLIPLEmbedModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zCLIPGEmbedModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('CLIPGEmbedModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zControlLoRAModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('ControlLoRAModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zFluxVAEModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('FluxVAEModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zSigLipModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('SigLipModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zFluxReduxModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('FluxReduxModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zImagen3ModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('Imagen3ModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zImagen4ModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('Imagen4ModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zChatGPT4oModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('ChatGPT4oModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zVeo3ModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('Veo3ModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zRunwayModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('RunwayModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zFluxKontextModelFieldType = zFieldTypeBase.extend({
|
|
||||||
name: z.literal('FluxKontextModelField'),
|
|
||||||
originalType: zStatelessFieldType.optional(),
|
|
||||||
});
|
|
||||||
const zSchedulerFieldType = zFieldTypeBase.extend({
|
const zSchedulerFieldType = zFieldTypeBase.extend({
|
||||||
name: z.literal('SchedulerField'),
|
name: z.literal('SchedulerField'),
|
||||||
originalType: zStatelessFieldType.optional(),
|
originalType: zStatelessFieldType.optional(),
|
||||||
@@ -302,33 +209,6 @@ const zStatefulFieldType = z.union([
|
|||||||
zImageFieldType,
|
zImageFieldType,
|
||||||
zBoardFieldType,
|
zBoardFieldType,
|
||||||
zModelIdentifierFieldType,
|
zModelIdentifierFieldType,
|
||||||
zMainModelFieldType,
|
|
||||||
zSDXLMainModelFieldType,
|
|
||||||
zSD3MainModelFieldType,
|
|
||||||
zCogView4MainModelFieldType,
|
|
||||||
zFluxMainModelFieldType,
|
|
||||||
zSDXLRefinerModelFieldType,
|
|
||||||
zVAEModelFieldType,
|
|
||||||
zLoRAModelFieldType,
|
|
||||||
zLLaVAModelFieldType,
|
|
||||||
zControlNetModelFieldType,
|
|
||||||
zIPAdapterModelFieldType,
|
|
||||||
zT2IAdapterModelFieldType,
|
|
||||||
zSpandrelImageToImageModelFieldType,
|
|
||||||
zT5EncoderModelFieldType,
|
|
||||||
zCLIPEmbedModelFieldType,
|
|
||||||
zCLIPLEmbedModelFieldType,
|
|
||||||
zCLIPGEmbedModelFieldType,
|
|
||||||
zControlLoRAModelFieldType,
|
|
||||||
zFluxVAEModelFieldType,
|
|
||||||
zSigLipModelFieldType,
|
|
||||||
zFluxReduxModelFieldType,
|
|
||||||
zImagen3ModelFieldType,
|
|
||||||
zImagen4ModelFieldType,
|
|
||||||
zChatGPT4oModelFieldType,
|
|
||||||
zFluxKontextModelFieldType,
|
|
||||||
zVeo3ModelFieldType,
|
|
||||||
zRunwayModelFieldType,
|
|
||||||
zColorFieldType,
|
zColorFieldType,
|
||||||
zSchedulerFieldType,
|
zSchedulerFieldType,
|
||||||
zFloatGeneratorFieldType,
|
zFloatGeneratorFieldType,
|
||||||
@@ -344,36 +224,7 @@ const zFieldType = z.union([zStatefulFieldType, zStatelessFieldType]);
|
|||||||
export type FieldType = z.infer<typeof zFieldType>;
|
export type FieldType = z.infer<typeof zFieldType>;
|
||||||
|
|
||||||
const modelFieldTypeNames = [
|
const modelFieldTypeNames = [
|
||||||
// Stateful model fields
|
|
||||||
zModelIdentifierFieldType.shape.name.value,
|
zModelIdentifierFieldType.shape.name.value,
|
||||||
zMainModelFieldType.shape.name.value,
|
|
||||||
zSDXLMainModelFieldType.shape.name.value,
|
|
||||||
zSD3MainModelFieldType.shape.name.value,
|
|
||||||
zCogView4MainModelFieldType.shape.name.value,
|
|
||||||
zFluxMainModelFieldType.shape.name.value,
|
|
||||||
zSDXLRefinerModelFieldType.shape.name.value,
|
|
||||||
zVAEModelFieldType.shape.name.value,
|
|
||||||
zLoRAModelFieldType.shape.name.value,
|
|
||||||
zLLaVAModelFieldType.shape.name.value,
|
|
||||||
zControlNetModelFieldType.shape.name.value,
|
|
||||||
zIPAdapterModelFieldType.shape.name.value,
|
|
||||||
zT2IAdapterModelFieldType.shape.name.value,
|
|
||||||
zSpandrelImageToImageModelFieldType.shape.name.value,
|
|
||||||
zT5EncoderModelFieldType.shape.name.value,
|
|
||||||
zCLIPEmbedModelFieldType.shape.name.value,
|
|
||||||
zCLIPLEmbedModelFieldType.shape.name.value,
|
|
||||||
zCLIPGEmbedModelFieldType.shape.name.value,
|
|
||||||
zControlLoRAModelFieldType.shape.name.value,
|
|
||||||
zFluxVAEModelFieldType.shape.name.value,
|
|
||||||
zSigLipModelFieldType.shape.name.value,
|
|
||||||
zFluxReduxModelFieldType.shape.name.value,
|
|
||||||
zImagen3ModelFieldType.shape.name.value,
|
|
||||||
zImagen4ModelFieldType.shape.name.value,
|
|
||||||
zChatGPT4oModelFieldType.shape.name.value,
|
|
||||||
zFluxKontextModelFieldType.shape.name.value,
|
|
||||||
zVeo3ModelFieldType.shape.name.value,
|
|
||||||
zRunwayModelFieldType.shape.name.value,
|
|
||||||
// Stateless model fields
|
|
||||||
'UNetField',
|
'UNetField',
|
||||||
'VAEField',
|
'VAEField',
|
||||||
'CLIPField',
|
'CLIPField',
|
||||||
@@ -779,26 +630,6 @@ export const isColorFieldInputInstance = buildInstanceTypeGuard(zColorFieldInput
|
|||||||
export const isColorFieldInputTemplate = buildTemplateTypeGuard<ColorFieldInputTemplate>('ColorField');
|
export const isColorFieldInputTemplate = buildTemplateTypeGuard<ColorFieldInputTemplate>('ColorField');
|
||||||
// #endregion
|
// #endregion
|
||||||
|
|
||||||
// #region MainModelField
|
|
||||||
export const zMainModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zMainModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zMainModelFieldValue,
|
|
||||||
});
|
|
||||||
const zMainModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zMainModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zMainModelFieldValue,
|
|
||||||
});
|
|
||||||
const zMainModelFieldOutputTemplate = zFieldOutputTemplateBase.extend({
|
|
||||||
type: zMainModelFieldType,
|
|
||||||
});
|
|
||||||
export type MainModelFieldValue = z.infer<typeof zMainModelFieldValue>;
|
|
||||||
export type MainModelFieldInputInstance = z.infer<typeof zMainModelFieldInputInstance>;
|
|
||||||
export type MainModelFieldInputTemplate = z.infer<typeof zMainModelFieldInputTemplate>;
|
|
||||||
export const isMainModelFieldInputInstance = buildInstanceTypeGuard(zMainModelFieldInputInstance);
|
|
||||||
export const isMainModelFieldInputTemplate = buildTemplateTypeGuard<MainModelFieldInputTemplate>('MainModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region ModelIdentifierField
|
// #region ModelIdentifierField
|
||||||
export const zModelIdentifierFieldValue = zModelIdentifierField.optional();
|
export const zModelIdentifierFieldValue = zModelIdentifierField.optional();
|
||||||
const zModelIdentifierFieldInputInstance = zFieldInputInstanceBase.extend({
|
const zModelIdentifierFieldInputInstance = zFieldInputInstanceBase.extend({
|
||||||
@@ -820,507 +651,6 @@ export const isModelIdentifierFieldInputTemplate =
|
|||||||
buildTemplateTypeGuard<ModelIdentifierFieldInputTemplate>('ModelIdentifierField');
|
buildTemplateTypeGuard<ModelIdentifierFieldInputTemplate>('ModelIdentifierField');
|
||||||
// #endregion
|
// #endregion
|
||||||
|
|
||||||
// #region SDXLMainModelField
|
|
||||||
const zSDXLMainModelFieldValue = zMainModelFieldValue; // TODO: Narrow to SDXL models only.
|
|
||||||
const zSDXLMainModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zSDXLMainModelFieldValue,
|
|
||||||
});
|
|
||||||
const zSDXLMainModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zSDXLMainModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zSDXLMainModelFieldValue,
|
|
||||||
});
|
|
||||||
const zSDXLMainModelFieldOutputTemplate = zFieldOutputTemplateBase.extend({
|
|
||||||
type: zSDXLMainModelFieldType,
|
|
||||||
});
|
|
||||||
export type SDXLMainModelFieldInputInstance = z.infer<typeof zSDXLMainModelFieldInputInstance>;
|
|
||||||
export type SDXLMainModelFieldInputTemplate = z.infer<typeof zSDXLMainModelFieldInputTemplate>;
|
|
||||||
export const isSDXLMainModelFieldInputInstance = buildInstanceTypeGuard(zSDXLMainModelFieldInputInstance);
|
|
||||||
export const isSDXLMainModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<SDXLMainModelFieldInputTemplate>('SDXLMainModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region SD3MainModelField
|
|
||||||
const zSD3MainModelFieldValue = zMainModelFieldValue; // TODO: Narrow to SDXL models only.
|
|
||||||
const zSD3MainModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zSD3MainModelFieldValue,
|
|
||||||
});
|
|
||||||
const zSD3MainModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zSD3MainModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zSD3MainModelFieldValue,
|
|
||||||
});
|
|
||||||
const zSD3MainModelFieldOutputTemplate = zFieldOutputTemplateBase.extend({
|
|
||||||
type: zSD3MainModelFieldType,
|
|
||||||
});
|
|
||||||
export type SD3MainModelFieldInputInstance = z.infer<typeof zSD3MainModelFieldInputInstance>;
|
|
||||||
export type SD3MainModelFieldInputTemplate = z.infer<typeof zSD3MainModelFieldInputTemplate>;
|
|
||||||
export const isSD3MainModelFieldInputInstance = buildInstanceTypeGuard(zSD3MainModelFieldInputInstance);
|
|
||||||
export const isSD3MainModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<SD3MainModelFieldInputTemplate>('SD3MainModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region CogView4MainModelField
|
|
||||||
const zCogView4MainModelFieldValue = zMainModelFieldValue;
|
|
||||||
const zCogView4MainModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zCogView4MainModelFieldValue,
|
|
||||||
});
|
|
||||||
const zCogView4MainModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zCogView4MainModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zCogView4MainModelFieldValue,
|
|
||||||
});
|
|
||||||
const zCogView4MainModelFieldOutputTemplate = zFieldOutputTemplateBase.extend({
|
|
||||||
type: zCogView4MainModelFieldType,
|
|
||||||
});
|
|
||||||
export type CogView4MainModelFieldInputInstance = z.infer<typeof zCogView4MainModelFieldInputInstance>;
|
|
||||||
export type CogView4MainModelFieldInputTemplate = z.infer<typeof zCogView4MainModelFieldInputTemplate>;
|
|
||||||
export const isCogView4MainModelFieldInputInstance = buildInstanceTypeGuard(zCogView4MainModelFieldInputInstance);
|
|
||||||
export const isCogView4MainModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<CogView4MainModelFieldInputTemplate>('CogView4MainModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region FluxMainModelField
|
|
||||||
const zFluxMainModelFieldValue = zMainModelFieldValue; // TODO: Narrow to SDXL models only.
|
|
||||||
const zFluxMainModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zFluxMainModelFieldValue,
|
|
||||||
});
|
|
||||||
const zFluxMainModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zFluxMainModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zFluxMainModelFieldValue,
|
|
||||||
});
|
|
||||||
const zFluxMainModelFieldOutputTemplate = zFieldOutputTemplateBase.extend({
|
|
||||||
type: zFluxMainModelFieldType,
|
|
||||||
});
|
|
||||||
export type FluxMainModelFieldInputInstance = z.infer<typeof zFluxMainModelFieldInputInstance>;
|
|
||||||
export type FluxMainModelFieldInputTemplate = z.infer<typeof zFluxMainModelFieldInputTemplate>;
|
|
||||||
export const isFluxMainModelFieldInputInstance = buildInstanceTypeGuard(zFluxMainModelFieldInputInstance);
|
|
||||||
export const isFluxMainModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<FluxMainModelFieldInputTemplate>('FluxMainModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region SDXLRefinerModelField
|
|
||||||
/** @alias */ // tells knip to ignore this duplicate export
|
|
||||||
export const zSDXLRefinerModelFieldValue = zMainModelFieldValue; // TODO: Narrow to SDXL Refiner models only.
|
|
||||||
const zSDXLRefinerModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zSDXLRefinerModelFieldValue,
|
|
||||||
});
|
|
||||||
const zSDXLRefinerModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zSDXLRefinerModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zSDXLRefinerModelFieldValue,
|
|
||||||
});
|
|
||||||
const zSDXLRefinerModelFieldOutputTemplate = zFieldOutputTemplateBase.extend({
|
|
||||||
type: zSDXLRefinerModelFieldType,
|
|
||||||
});
|
|
||||||
export type SDXLRefinerModelFieldValue = z.infer<typeof zSDXLRefinerModelFieldValue>;
|
|
||||||
export type SDXLRefinerModelFieldInputInstance = z.infer<typeof zSDXLRefinerModelFieldInputInstance>;
|
|
||||||
export type SDXLRefinerModelFieldInputTemplate = z.infer<typeof zSDXLRefinerModelFieldInputTemplate>;
|
|
||||||
export const isSDXLRefinerModelFieldInputInstance = buildInstanceTypeGuard(zSDXLRefinerModelFieldInputInstance);
|
|
||||||
export const isSDXLRefinerModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<SDXLRefinerModelFieldInputTemplate>('SDXLRefinerModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region VAEModelField
|
|
||||||
|
|
||||||
export const zVAEModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zVAEModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zVAEModelFieldValue,
|
|
||||||
});
|
|
||||||
const zVAEModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zVAEModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zVAEModelFieldValue,
|
|
||||||
});
|
|
||||||
const zVAEModelFieldOutputTemplate = zFieldOutputTemplateBase.extend({
|
|
||||||
type: zVAEModelFieldType,
|
|
||||||
});
|
|
||||||
export type VAEModelFieldValue = z.infer<typeof zVAEModelFieldValue>;
|
|
||||||
export type VAEModelFieldInputInstance = z.infer<typeof zVAEModelFieldInputInstance>;
|
|
||||||
export type VAEModelFieldInputTemplate = z.infer<typeof zVAEModelFieldInputTemplate>;
|
|
||||||
export const isVAEModelFieldInputInstance = buildInstanceTypeGuard(zVAEModelFieldInputInstance);
|
|
||||||
export const isVAEModelFieldInputTemplate = buildTemplateTypeGuard<VAEModelFieldInputTemplate>('VAEModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region LoRAModelField
|
|
||||||
export const zLoRAModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zLoRAModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zLoRAModelFieldValue,
|
|
||||||
});
|
|
||||||
const zLoRAModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zLoRAModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zLoRAModelFieldValue,
|
|
||||||
});
|
|
||||||
const zLoRAModelFieldOutputTemplate = zFieldOutputTemplateBase.extend({
|
|
||||||
type: zLoRAModelFieldType,
|
|
||||||
});
|
|
||||||
export type LoRAModelFieldValue = z.infer<typeof zLoRAModelFieldValue>;
|
|
||||||
export type LoRAModelFieldInputInstance = z.infer<typeof zLoRAModelFieldInputInstance>;
|
|
||||||
export type LoRAModelFieldInputTemplate = z.infer<typeof zLoRAModelFieldInputTemplate>;
|
|
||||||
export const isLoRAModelFieldInputInstance = buildInstanceTypeGuard(zLoRAModelFieldInputInstance);
|
|
||||||
export const isLoRAModelFieldInputTemplate = buildTemplateTypeGuard<LoRAModelFieldInputTemplate>('LoRAModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region LLaVAModelField
|
|
||||||
export const zLLaVAModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zLLaVAModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zLLaVAModelFieldValue,
|
|
||||||
});
|
|
||||||
const zLLaVAModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zLLaVAModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zLLaVAModelFieldValue,
|
|
||||||
});
|
|
||||||
const zLLaVAModelFieldOutputTemplate = zFieldOutputTemplateBase.extend({
|
|
||||||
type: zLLaVAModelFieldType,
|
|
||||||
});
|
|
||||||
export type LLaVAModelFieldValue = z.infer<typeof zLLaVAModelFieldValue>;
|
|
||||||
export type LLaVAModelFieldInputInstance = z.infer<typeof zLLaVAModelFieldInputInstance>;
|
|
||||||
export type LLaVAModelFieldInputTemplate = z.infer<typeof zLLaVAModelFieldInputTemplate>;
|
|
||||||
export const isLLaVAModelFieldInputInstance = buildInstanceTypeGuard(zLLaVAModelFieldInputInstance);
|
|
||||||
export const isLLaVAModelFieldInputTemplate = buildTemplateTypeGuard<LLaVAModelFieldInputTemplate>('LLaVAModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region ControlNetModelField
|
|
||||||
export const zControlNetModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zControlNetModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zControlNetModelFieldValue,
|
|
||||||
});
|
|
||||||
const zControlNetModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zControlNetModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zControlNetModelFieldValue,
|
|
||||||
});
|
|
||||||
const zControlNetModelFieldOutputTemplate = zFieldOutputTemplateBase.extend({
|
|
||||||
type: zControlNetModelFieldType,
|
|
||||||
});
|
|
||||||
export type ControlNetModelFieldValue = z.infer<typeof zControlNetModelFieldValue>;
|
|
||||||
export type ControlNetModelFieldInputInstance = z.infer<typeof zControlNetModelFieldInputInstance>;
|
|
||||||
export type ControlNetModelFieldInputTemplate = z.infer<typeof zControlNetModelFieldInputTemplate>;
|
|
||||||
export const isControlNetModelFieldInputInstance = buildInstanceTypeGuard(zControlNetModelFieldInputInstance);
|
|
||||||
export const isControlNetModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<ControlNetModelFieldInputTemplate>('ControlNetModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region IPAdapterModelField
|
|
||||||
export const zIPAdapterModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zIPAdapterModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zIPAdapterModelFieldValue,
|
|
||||||
});
|
|
||||||
const zIPAdapterModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zIPAdapterModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zIPAdapterModelFieldValue,
|
|
||||||
});
|
|
||||||
const zIPAdapterModelFieldOutputTemplate = zFieldOutputTemplateBase.extend({
|
|
||||||
type: zIPAdapterModelFieldType,
|
|
||||||
});
|
|
||||||
export type IPAdapterModelFieldValue = z.infer<typeof zIPAdapterModelFieldValue>;
|
|
||||||
export type IPAdapterModelFieldInputInstance = z.infer<typeof zIPAdapterModelFieldInputInstance>;
|
|
||||||
export type IPAdapterModelFieldInputTemplate = z.infer<typeof zIPAdapterModelFieldInputTemplate>;
|
|
||||||
export const isIPAdapterModelFieldInputInstance = buildInstanceTypeGuard(zIPAdapterModelFieldInputInstance);
|
|
||||||
export const isIPAdapterModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<IPAdapterModelFieldInputTemplate>('IPAdapterModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region T2IAdapterField
|
|
||||||
export const zT2IAdapterModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zT2IAdapterModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zT2IAdapterModelFieldValue,
|
|
||||||
});
|
|
||||||
const zT2IAdapterModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zT2IAdapterModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zT2IAdapterModelFieldValue,
|
|
||||||
});
|
|
||||||
const zT2IAdapterModelFieldOutputTemplate = zFieldOutputTemplateBase.extend({
|
|
||||||
type: zT2IAdapterModelFieldType,
|
|
||||||
});
|
|
||||||
export type T2IAdapterModelFieldValue = z.infer<typeof zT2IAdapterModelFieldValue>;
|
|
||||||
export type T2IAdapterModelFieldInputInstance = z.infer<typeof zT2IAdapterModelFieldInputInstance>;
|
|
||||||
export type T2IAdapterModelFieldInputTemplate = z.infer<typeof zT2IAdapterModelFieldInputTemplate>;
|
|
||||||
export const isT2IAdapterModelFieldInputInstance = buildInstanceTypeGuard(zT2IAdapterModelFieldInputInstance);
|
|
||||||
export const isT2IAdapterModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<T2IAdapterModelFieldInputTemplate>('T2IAdapterModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region SpandrelModelToModelField
|
|
||||||
export const zSpandrelImageToImageModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zSpandrelImageToImageModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zSpandrelImageToImageModelFieldValue,
|
|
||||||
});
|
|
||||||
const zSpandrelImageToImageModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zSpandrelImageToImageModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zSpandrelImageToImageModelFieldValue,
|
|
||||||
});
|
|
||||||
const zSpandrelImageToImageModelFieldOutputTemplate = zFieldOutputTemplateBase.extend({
|
|
||||||
type: zSpandrelImageToImageModelFieldType,
|
|
||||||
});
|
|
||||||
export type SpandrelImageToImageModelFieldValue = z.infer<typeof zSpandrelImageToImageModelFieldValue>;
|
|
||||||
export type SpandrelImageToImageModelFieldInputInstance = z.infer<typeof zSpandrelImageToImageModelFieldInputInstance>;
|
|
||||||
export type SpandrelImageToImageModelFieldInputTemplate = z.infer<typeof zSpandrelImageToImageModelFieldInputTemplate>;
|
|
||||||
export const isSpandrelImageToImageModelFieldInputInstance = buildInstanceTypeGuard(
|
|
||||||
zSpandrelImageToImageModelFieldInputInstance
|
|
||||||
);
|
|
||||||
export const isSpandrelImageToImageModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<SpandrelImageToImageModelFieldInputTemplate>('SpandrelImageToImageModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region T5EncoderModelField
|
|
||||||
|
|
||||||
export const zT5EncoderModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zT5EncoderModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zT5EncoderModelFieldValue,
|
|
||||||
});
|
|
||||||
const zT5EncoderModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zT5EncoderModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zT5EncoderModelFieldValue,
|
|
||||||
});
|
|
||||||
export type T5EncoderModelFieldValue = z.infer<typeof zT5EncoderModelFieldValue>;
|
|
||||||
export type T5EncoderModelFieldInputInstance = z.infer<typeof zT5EncoderModelFieldInputInstance>;
|
|
||||||
export type T5EncoderModelFieldInputTemplate = z.infer<typeof zT5EncoderModelFieldInputTemplate>;
|
|
||||||
export const isT5EncoderModelFieldInputInstance = buildInstanceTypeGuard(zT5EncoderModelFieldInputInstance);
|
|
||||||
export const isT5EncoderModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<T5EncoderModelFieldInputTemplate>('T5EncoderModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region FluxVAEModelField
|
|
||||||
export const zFluxVAEModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zFluxVAEModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zFluxVAEModelFieldValue,
|
|
||||||
});
|
|
||||||
const zFluxVAEModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zFluxVAEModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zFluxVAEModelFieldValue,
|
|
||||||
});
|
|
||||||
export type FluxVAEModelFieldValue = z.infer<typeof zFluxVAEModelFieldValue>;
|
|
||||||
export type FluxVAEModelFieldInputInstance = z.infer<typeof zFluxVAEModelFieldInputInstance>;
|
|
||||||
export type FluxVAEModelFieldInputTemplate = z.infer<typeof zFluxVAEModelFieldInputTemplate>;
|
|
||||||
export const isFluxVAEModelFieldInputInstance = buildInstanceTypeGuard(zFluxVAEModelFieldInputInstance);
|
|
||||||
export const isFluxVAEModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<FluxVAEModelFieldInputTemplate>('FluxVAEModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region CLIPEmbedModelField
|
|
||||||
export const zCLIPEmbedModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zCLIPEmbedModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zCLIPEmbedModelFieldValue,
|
|
||||||
});
|
|
||||||
const zCLIPEmbedModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zCLIPEmbedModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zCLIPEmbedModelFieldValue,
|
|
||||||
});
|
|
||||||
export type CLIPEmbedModelFieldValue = z.infer<typeof zCLIPEmbedModelFieldValue>;
|
|
||||||
export type CLIPEmbedModelFieldInputInstance = z.infer<typeof zCLIPEmbedModelFieldInputInstance>;
|
|
||||||
export type CLIPEmbedModelFieldInputTemplate = z.infer<typeof zCLIPEmbedModelFieldInputTemplate>;
|
|
||||||
export const isCLIPEmbedModelFieldInputInstance = buildInstanceTypeGuard(zCLIPEmbedModelFieldInputInstance);
|
|
||||||
export const isCLIPEmbedModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<CLIPEmbedModelFieldInputTemplate>('CLIPEmbedModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region CLIPLEmbedModelField
|
|
||||||
export const zCLIPLEmbedModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zCLIPLEmbedModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zCLIPLEmbedModelFieldValue,
|
|
||||||
});
|
|
||||||
const zCLIPLEmbedModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zCLIPLEmbedModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zCLIPLEmbedModelFieldValue,
|
|
||||||
});
|
|
||||||
export type CLIPLEmbedModelFieldValue = z.infer<typeof zCLIPLEmbedModelFieldValue>;
|
|
||||||
export type CLIPLEmbedModelFieldInputInstance = z.infer<typeof zCLIPLEmbedModelFieldInputInstance>;
|
|
||||||
export type CLIPLEmbedModelFieldInputTemplate = z.infer<typeof zCLIPLEmbedModelFieldInputTemplate>;
|
|
||||||
export const isCLIPLEmbedModelFieldInputInstance = buildInstanceTypeGuard(zCLIPLEmbedModelFieldInputInstance);
|
|
||||||
export const isCLIPLEmbedModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<CLIPLEmbedModelFieldInputTemplate>('CLIPLEmbedModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region CLIPGEmbedModelField
|
|
||||||
export const zCLIPGEmbedModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zCLIPGEmbedModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zCLIPGEmbedModelFieldValue,
|
|
||||||
});
|
|
||||||
const zCLIPGEmbedModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zCLIPGEmbedModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zCLIPGEmbedModelFieldValue,
|
|
||||||
});
|
|
||||||
export type CLIPGEmbedModelFieldValue = z.infer<typeof zCLIPLEmbedModelFieldValue>;
|
|
||||||
export type CLIPGEmbedModelFieldInputInstance = z.infer<typeof zCLIPGEmbedModelFieldInputInstance>;
|
|
||||||
export type CLIPGEmbedModelFieldInputTemplate = z.infer<typeof zCLIPGEmbedModelFieldInputTemplate>;
|
|
||||||
export const isCLIPGEmbedModelFieldInputInstance = buildInstanceTypeGuard(zCLIPGEmbedModelFieldInputInstance);
|
|
||||||
export const isCLIPGEmbedModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<CLIPGEmbedModelFieldInputTemplate>('CLIPGEmbedModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region ControlLoRAModelField
|
|
||||||
export const zControlLoRAModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zControlLoRAModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zControlLoRAModelFieldValue,
|
|
||||||
});
|
|
||||||
const zControlLoRAModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zControlLoRAModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zControlLoRAModelFieldValue,
|
|
||||||
});
|
|
||||||
export type ControlLoRAModelFieldValue = z.infer<typeof zCLIPLEmbedModelFieldValue>;
|
|
||||||
export type ControlLoRAModelFieldInputInstance = z.infer<typeof zControlLoRAModelFieldInputInstance>;
|
|
||||||
export type ControlLoRAModelFieldInputTemplate = z.infer<typeof zControlLoRAModelFieldInputTemplate>;
|
|
||||||
export const isControlLoRAModelFieldInputInstance = buildInstanceTypeGuard(zControlLoRAModelFieldInputInstance);
|
|
||||||
export const isControlLoRAModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<ControlLoRAModelFieldInputTemplate>('ControlLoRAModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region SigLipModelField
|
|
||||||
export const zSigLipModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zSigLipModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zSigLipModelFieldValue,
|
|
||||||
});
|
|
||||||
const zSigLipModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zSigLipModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zSigLipModelFieldValue,
|
|
||||||
});
|
|
||||||
export type SigLipModelFieldValue = z.infer<typeof zSigLipModelFieldValue>;
|
|
||||||
export type SigLipModelFieldInputInstance = z.infer<typeof zSigLipModelFieldInputInstance>;
|
|
||||||
export type SigLipModelFieldInputTemplate = z.infer<typeof zSigLipModelFieldInputTemplate>;
|
|
||||||
export const isSigLipModelFieldInputInstance = buildInstanceTypeGuard(zSigLipModelFieldInputInstance);
|
|
||||||
export const isSigLipModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<SigLipModelFieldInputTemplate>('SigLipModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region FluxReduxModelField
|
|
||||||
export const zFluxReduxModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zFluxReduxModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zFluxReduxModelFieldValue,
|
|
||||||
});
|
|
||||||
const zFluxReduxModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zFluxReduxModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zFluxReduxModelFieldValue,
|
|
||||||
});
|
|
||||||
export type FluxReduxModelFieldValue = z.infer<typeof zFluxReduxModelFieldValue>;
|
|
||||||
export type FluxReduxModelFieldInputInstance = z.infer<typeof zFluxReduxModelFieldInputInstance>;
|
|
||||||
export type FluxReduxModelFieldInputTemplate = z.infer<typeof zFluxReduxModelFieldInputTemplate>;
|
|
||||||
export const isFluxReduxModelFieldInputInstance = buildInstanceTypeGuard(zFluxReduxModelFieldInputInstance);
|
|
||||||
export const isFluxReduxModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<FluxReduxModelFieldInputTemplate>('FluxReduxModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region Imagen3ModelField
|
|
||||||
export const zImagen3ModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zImagen3ModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zImagen3ModelFieldValue,
|
|
||||||
});
|
|
||||||
const zImagen3ModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zImagen3ModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zImagen3ModelFieldValue,
|
|
||||||
});
|
|
||||||
export type Imagen3ModelFieldValue = z.infer<typeof zImagen3ModelFieldValue>;
|
|
||||||
export type Imagen3ModelFieldInputInstance = z.infer<typeof zImagen3ModelFieldInputInstance>;
|
|
||||||
export type Imagen3ModelFieldInputTemplate = z.infer<typeof zImagen3ModelFieldInputTemplate>;
|
|
||||||
export const isImagen3ModelFieldInputInstance = buildInstanceTypeGuard(zImagen3ModelFieldInputInstance);
|
|
||||||
export const isImagen3ModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<Imagen3ModelFieldInputTemplate>('Imagen3ModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region Imagen4ModelField
|
|
||||||
export const zImagen4ModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zImagen4ModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zImagen4ModelFieldValue,
|
|
||||||
});
|
|
||||||
const zImagen4ModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zImagen4ModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zImagen4ModelFieldValue,
|
|
||||||
});
|
|
||||||
export type Imagen4ModelFieldValue = z.infer<typeof zImagen4ModelFieldValue>;
|
|
||||||
export type Imagen4ModelFieldInputInstance = z.infer<typeof zImagen4ModelFieldInputInstance>;
|
|
||||||
export type Imagen4ModelFieldInputTemplate = z.infer<typeof zImagen4ModelFieldInputTemplate>;
|
|
||||||
export const isImagen4ModelFieldInputInstance = buildInstanceTypeGuard(zImagen4ModelFieldInputInstance);
|
|
||||||
export const isImagen4ModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<Imagen4ModelFieldInputTemplate>('Imagen4ModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region FluxKontextModelField
|
|
||||||
export const zFluxKontextModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zFluxKontextModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zFluxKontextModelFieldValue,
|
|
||||||
});
|
|
||||||
const zFluxKontextModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zFluxKontextModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zFluxKontextModelFieldValue,
|
|
||||||
});
|
|
||||||
export type FluxKontextModelFieldValue = z.infer<typeof zFluxKontextModelFieldValue>;
|
|
||||||
export type FluxKontextModelFieldInputInstance = z.infer<typeof zFluxKontextModelFieldInputInstance>;
|
|
||||||
export type FluxKontextModelFieldInputTemplate = z.infer<typeof zFluxKontextModelFieldInputTemplate>;
|
|
||||||
export const isFluxKontextModelFieldInputInstance = buildInstanceTypeGuard(zFluxKontextModelFieldInputInstance);
|
|
||||||
export const isFluxKontextModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<FluxKontextModelFieldInputTemplate>('FluxKontextModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region ChatGPT4oModelField
|
|
||||||
export const zChatGPT4oModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zChatGPT4oModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zChatGPT4oModelFieldValue,
|
|
||||||
});
|
|
||||||
const zChatGPT4oModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zChatGPT4oModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zChatGPT4oModelFieldValue,
|
|
||||||
});
|
|
||||||
export type ChatGPT4oModelFieldValue = z.infer<typeof zChatGPT4oModelFieldValue>;
|
|
||||||
export type ChatGPT4oModelFieldInputInstance = z.infer<typeof zChatGPT4oModelFieldInputInstance>;
|
|
||||||
export type ChatGPT4oModelFieldInputTemplate = z.infer<typeof zChatGPT4oModelFieldInputTemplate>;
|
|
||||||
export const isChatGPT4oModelFieldInputInstance = buildInstanceTypeGuard(zChatGPT4oModelFieldInputInstance);
|
|
||||||
export const isChatGPT4oModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<ChatGPT4oModelFieldInputTemplate>('ChatGPT4oModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region Veo3ModelField
|
|
||||||
export const zVeo3ModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zVeo3ModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zVeo3ModelFieldValue,
|
|
||||||
});
|
|
||||||
const zVeo3ModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zVeo3ModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zVeo3ModelFieldValue,
|
|
||||||
});
|
|
||||||
export type Veo3ModelFieldValue = z.infer<typeof zVeo3ModelFieldValue>;
|
|
||||||
export type Veo3ModelFieldInputInstance = z.infer<typeof zVeo3ModelFieldInputInstance>;
|
|
||||||
export type Veo3ModelFieldInputTemplate = z.infer<typeof zVeo3ModelFieldInputTemplate>;
|
|
||||||
export const isVeo3ModelFieldInputInstance = buildInstanceTypeGuard(zVeo3ModelFieldInputInstance);
|
|
||||||
export const isVeo3ModelFieldInputTemplate = buildTemplateTypeGuard<Veo3ModelFieldInputTemplate>('Veo3ModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region RunwayModelField
|
|
||||||
export const zRunwayModelFieldValue = zModelIdentifierField.optional();
|
|
||||||
const zRunwayModelFieldInputInstance = zFieldInputInstanceBase.extend({
|
|
||||||
value: zRunwayModelFieldValue,
|
|
||||||
});
|
|
||||||
const zRunwayModelFieldInputTemplate = zFieldInputTemplateBase.extend({
|
|
||||||
type: zRunwayModelFieldType,
|
|
||||||
originalType: zFieldType.optional(),
|
|
||||||
default: zRunwayModelFieldValue,
|
|
||||||
});
|
|
||||||
export type RunwayModelFieldValue = z.infer<typeof zRunwayModelFieldValue>;
|
|
||||||
export type RunwayModelFieldInputInstance = z.infer<typeof zRunwayModelFieldInputInstance>;
|
|
||||||
export type RunwayModelFieldInputTemplate = z.infer<typeof zRunwayModelFieldInputTemplate>;
|
|
||||||
export const isRunwayModelFieldInputInstance = buildInstanceTypeGuard(zRunwayModelFieldInputInstance);
|
|
||||||
export const isRunwayModelFieldInputTemplate =
|
|
||||||
buildTemplateTypeGuard<RunwayModelFieldInputTemplate>('RunwayModelField');
|
|
||||||
// #endregion
|
|
||||||
|
|
||||||
// #region SchedulerField
|
// #region SchedulerField
|
||||||
export const zSchedulerFieldValue = zSchedulerField.optional();
|
export const zSchedulerFieldValue = zSchedulerField.optional();
|
||||||
const zSchedulerFieldInputInstance = zFieldInputInstanceBase.extend({
|
const zSchedulerFieldInputInstance = zFieldInputInstanceBase.extend({
|
||||||
@@ -1931,31 +1261,6 @@ export const zStatefulFieldValue = z.union([
|
|||||||
zImageFieldCollectionValue,
|
zImageFieldCollectionValue,
|
||||||
zBoardFieldValue,
|
zBoardFieldValue,
|
||||||
zModelIdentifierFieldValue,
|
zModelIdentifierFieldValue,
|
||||||
zMainModelFieldValue,
|
|
||||||
zSDXLMainModelFieldValue,
|
|
||||||
zFluxMainModelFieldValue,
|
|
||||||
zSD3MainModelFieldValue,
|
|
||||||
zCogView4MainModelFieldValue,
|
|
||||||
zSDXLRefinerModelFieldValue,
|
|
||||||
zVAEModelFieldValue,
|
|
||||||
zLoRAModelFieldValue,
|
|
||||||
zLLaVAModelFieldValue,
|
|
||||||
zControlNetModelFieldValue,
|
|
||||||
zIPAdapterModelFieldValue,
|
|
||||||
zT2IAdapterModelFieldValue,
|
|
||||||
zSpandrelImageToImageModelFieldValue,
|
|
||||||
zT5EncoderModelFieldValue,
|
|
||||||
zFluxVAEModelFieldValue,
|
|
||||||
zCLIPEmbedModelFieldValue,
|
|
||||||
zCLIPLEmbedModelFieldValue,
|
|
||||||
zCLIPGEmbedModelFieldValue,
|
|
||||||
zControlLoRAModelFieldValue,
|
|
||||||
zSigLipModelFieldValue,
|
|
||||||
zFluxReduxModelFieldValue,
|
|
||||||
zImagen3ModelFieldValue,
|
|
||||||
zImagen4ModelFieldValue,
|
|
||||||
zFluxKontextModelFieldValue,
|
|
||||||
zChatGPT4oModelFieldValue,
|
|
||||||
zColorFieldValue,
|
zColorFieldValue,
|
||||||
zSchedulerFieldValue,
|
zSchedulerFieldValue,
|
||||||
zFloatGeneratorFieldValue,
|
zFloatGeneratorFieldValue,
|
||||||
@@ -1983,22 +1288,6 @@ const zStatefulFieldInputInstance = z.union([
|
|||||||
zImageFieldCollectionInputInstance,
|
zImageFieldCollectionInputInstance,
|
||||||
zBoardFieldInputInstance,
|
zBoardFieldInputInstance,
|
||||||
zModelIdentifierFieldInputInstance,
|
zModelIdentifierFieldInputInstance,
|
||||||
zMainModelFieldInputInstance,
|
|
||||||
zFluxMainModelFieldInputInstance,
|
|
||||||
zSD3MainModelFieldInputInstance,
|
|
||||||
zCogView4MainModelFieldInputInstance,
|
|
||||||
zSDXLMainModelFieldInputInstance,
|
|
||||||
zSDXLRefinerModelFieldInputInstance,
|
|
||||||
zVAEModelFieldInputInstance,
|
|
||||||
zLoRAModelFieldInputInstance,
|
|
||||||
zLLaVAModelFieldInputInstance,
|
|
||||||
zControlNetModelFieldInputInstance,
|
|
||||||
zIPAdapterModelFieldInputInstance,
|
|
||||||
zT2IAdapterModelFieldInputInstance,
|
|
||||||
zSpandrelImageToImageModelFieldInputInstance,
|
|
||||||
zT5EncoderModelFieldInputInstance,
|
|
||||||
zFluxVAEModelFieldInputInstance,
|
|
||||||
zCLIPEmbedModelFieldInputInstance,
|
|
||||||
zColorFieldInputInstance,
|
zColorFieldInputInstance,
|
||||||
zSchedulerFieldInputInstance,
|
zSchedulerFieldInputInstance,
|
||||||
zFloatGeneratorFieldInputInstance,
|
zFloatGeneratorFieldInputInstance,
|
||||||
@@ -2025,33 +1314,6 @@ const zStatefulFieldInputTemplate = z.union([
|
|||||||
zImageFieldCollectionInputTemplate,
|
zImageFieldCollectionInputTemplate,
|
||||||
zBoardFieldInputTemplate,
|
zBoardFieldInputTemplate,
|
||||||
zModelIdentifierFieldInputTemplate,
|
zModelIdentifierFieldInputTemplate,
|
||||||
zMainModelFieldInputTemplate,
|
|
||||||
zFluxMainModelFieldInputTemplate,
|
|
||||||
zSD3MainModelFieldInputTemplate,
|
|
||||||
zCogView4MainModelFieldInputTemplate,
|
|
||||||
zSDXLMainModelFieldInputTemplate,
|
|
||||||
zSDXLRefinerModelFieldInputTemplate,
|
|
||||||
zVAEModelFieldInputTemplate,
|
|
||||||
zLoRAModelFieldInputTemplate,
|
|
||||||
zLLaVAModelFieldInputTemplate,
|
|
||||||
zControlNetModelFieldInputTemplate,
|
|
||||||
zIPAdapterModelFieldInputTemplate,
|
|
||||||
zT2IAdapterModelFieldInputTemplate,
|
|
||||||
zSpandrelImageToImageModelFieldInputTemplate,
|
|
||||||
zT5EncoderModelFieldInputTemplate,
|
|
||||||
zFluxVAEModelFieldInputTemplate,
|
|
||||||
zCLIPEmbedModelFieldInputTemplate,
|
|
||||||
zCLIPLEmbedModelFieldInputTemplate,
|
|
||||||
zCLIPGEmbedModelFieldInputTemplate,
|
|
||||||
zControlLoRAModelFieldInputTemplate,
|
|
||||||
zSigLipModelFieldInputTemplate,
|
|
||||||
zFluxReduxModelFieldInputTemplate,
|
|
||||||
zImagen3ModelFieldInputTemplate,
|
|
||||||
zImagen4ModelFieldInputTemplate,
|
|
||||||
zChatGPT4oModelFieldInputTemplate,
|
|
||||||
zFluxKontextModelFieldInputTemplate,
|
|
||||||
zVeo3ModelFieldInputTemplate,
|
|
||||||
zRunwayModelFieldInputTemplate,
|
|
||||||
zColorFieldInputTemplate,
|
zColorFieldInputTemplate,
|
||||||
zSchedulerFieldInputTemplate,
|
zSchedulerFieldInputTemplate,
|
||||||
zStatelessFieldInputTemplate,
|
zStatelessFieldInputTemplate,
|
||||||
@@ -2079,19 +1341,6 @@ const zStatefulFieldOutputTemplate = z.union([
|
|||||||
zImageFieldCollectionOutputTemplate,
|
zImageFieldCollectionOutputTemplate,
|
||||||
zBoardFieldOutputTemplate,
|
zBoardFieldOutputTemplate,
|
||||||
zModelIdentifierFieldOutputTemplate,
|
zModelIdentifierFieldOutputTemplate,
|
||||||
zMainModelFieldOutputTemplate,
|
|
||||||
zFluxMainModelFieldOutputTemplate,
|
|
||||||
zSD3MainModelFieldOutputTemplate,
|
|
||||||
zCogView4MainModelFieldOutputTemplate,
|
|
||||||
zSDXLMainModelFieldOutputTemplate,
|
|
||||||
zSDXLRefinerModelFieldOutputTemplate,
|
|
||||||
zVAEModelFieldOutputTemplate,
|
|
||||||
zLoRAModelFieldOutputTemplate,
|
|
||||||
zLLaVAModelFieldOutputTemplate,
|
|
||||||
zControlNetModelFieldOutputTemplate,
|
|
||||||
zIPAdapterModelFieldOutputTemplate,
|
|
||||||
zT2IAdapterModelFieldOutputTemplate,
|
|
||||||
zSpandrelImageToImageModelFieldOutputTemplate,
|
|
||||||
zColorFieldOutputTemplate,
|
zColorFieldOutputTemplate,
|
||||||
zSchedulerFieldOutputTemplate,
|
zSchedulerFieldOutputTemplate,
|
||||||
zFloatGeneratorFieldOutputTemplate,
|
zFloatGeneratorFieldOutputTemplate,
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { selectRefImagesSlice } from 'features/controlLayers/store/refImagesSlic
|
|||||||
import { selectCanvasMetadata } from 'features/controlLayers/store/selectors';
|
import { selectCanvasMetadata } from 'features/controlLayers/store/selectors';
|
||||||
import { isChatGPT4oAspectRatioID, isChatGPT4oReferenceImageConfig } from 'features/controlLayers/store/types';
|
import { isChatGPT4oAspectRatioID, isChatGPT4oReferenceImageConfig } from 'features/controlLayers/store/types';
|
||||||
import { getGlobalReferenceImageWarnings } from 'features/controlLayers/store/validators';
|
import { getGlobalReferenceImageWarnings } from 'features/controlLayers/store/validators';
|
||||||
import { type ImageField, zModelIdentifierField } from 'features/nodes/types/common';
|
import { type ImageField, zImageField, zModelIdentifierField } from 'features/nodes/types/common';
|
||||||
import { Graph } from 'features/nodes/util/graph/generation/Graph';
|
import { Graph } from 'features/nodes/util/graph/generation/Graph';
|
||||||
import {
|
import {
|
||||||
getOriginalAndScaledSizesForOtherModes,
|
getOriginalAndScaledSizesForOtherModes,
|
||||||
@@ -49,9 +49,7 @@ export const buildChatGPT4oGraph = async (arg: GraphBuilderArg): Promise<GraphBu
|
|||||||
reference_images = [];
|
reference_images = [];
|
||||||
for (const entity of validRefImages) {
|
for (const entity of validRefImages) {
|
||||||
assert(entity.config.image, 'Image is required for reference image');
|
assert(entity.config.image, 'Image is required for reference image');
|
||||||
reference_images.push({
|
reference_images.push(zImageField.parse(entity.config.image.crop?.image ?? entity.config.image.original.image));
|
||||||
image_name: entity.config.image.crop?.image.image_name ?? entity.config.image.original.image.image_name,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ export const buildFLUXGraph = async (arg: GraphBuilderArg): Promise<GraphBuilder
|
|||||||
const kontextImagePrep = g.addNode({
|
const kontextImagePrep = g.addNode({
|
||||||
id: getPrefixedId('flux_kontext_image_prep'),
|
id: getPrefixedId('flux_kontext_image_prep'),
|
||||||
type: 'flux_kontext_image_prep',
|
type: 'flux_kontext_image_prep',
|
||||||
images: [zImageField.parse(config.image)],
|
images: [zImageField.parse(config.image?.crop?.image ?? config.image?.original.image)],
|
||||||
});
|
});
|
||||||
const kontextConditioning = g.addNode({
|
const kontextConditioning = g.addNode({
|
||||||
type: 'flux_kontext',
|
type: 'flux_kontext',
|
||||||
|
|||||||
@@ -60,9 +60,7 @@ export const buildFluxKontextGraph = (arg: GraphBuilderArg): GraphBuilderReturn
|
|||||||
model: zModelIdentifierField.parse(model),
|
model: zModelIdentifierField.parse(model),
|
||||||
aspect_ratio: aspectRatio.id,
|
aspect_ratio: aspectRatio.id,
|
||||||
prompt_upsampling: true,
|
prompt_upsampling: true,
|
||||||
input_image: {
|
input_image: zImageField.parse(firstImage.crop?.image ?? firstImage.original.image),
|
||||||
image_name: firstImage.crop?.image.image_name ?? firstImage.original.image.image_name,
|
|
||||||
},
|
|
||||||
...selectCanvasOutputFields(state),
|
...selectCanvasOutputFields(state),
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@@ -70,7 +68,9 @@ export const buildFluxKontextGraph = (arg: GraphBuilderArg): GraphBuilderReturn
|
|||||||
const kontextConcatenator = g.addNode({
|
const kontextConcatenator = g.addNode({
|
||||||
id: getPrefixedId('flux_kontext_image_prep'),
|
id: getPrefixedId('flux_kontext_image_prep'),
|
||||||
type: 'flux_kontext_image_prep',
|
type: 'flux_kontext_image_prep',
|
||||||
images: validRefImages.map(({ config }) => zImageField.parse(config.image)),
|
images: validRefImages.map(({ config }) =>
|
||||||
|
zImageField.parse(config.image?.crop?.image ?? config.image?.original.image)
|
||||||
|
),
|
||||||
});
|
});
|
||||||
|
|
||||||
fluxKontextImage = g.addNode({
|
fluxKontextImage = g.addNode({
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { selectMainModelConfig } from 'features/controlLayers/store/paramsSlice'
|
|||||||
import { selectRefImagesSlice } from 'features/controlLayers/store/refImagesSlice';
|
import { selectRefImagesSlice } from 'features/controlLayers/store/refImagesSlice';
|
||||||
import { isGemini2_5ReferenceImageConfig } from 'features/controlLayers/store/types';
|
import { isGemini2_5ReferenceImageConfig } from 'features/controlLayers/store/types';
|
||||||
import { getGlobalReferenceImageWarnings } from 'features/controlLayers/store/validators';
|
import { getGlobalReferenceImageWarnings } from 'features/controlLayers/store/validators';
|
||||||
import type { ImageField } from 'features/nodes/types/common';
|
import { type ImageField, zImageField } from 'features/nodes/types/common';
|
||||||
import { Graph } from 'features/nodes/util/graph/generation/Graph';
|
import { Graph } from 'features/nodes/util/graph/generation/Graph';
|
||||||
import { selectCanvasOutputFields } from 'features/nodes/util/graph/graphBuilderUtils';
|
import { selectCanvasOutputFields } from 'features/nodes/util/graph/graphBuilderUtils';
|
||||||
import type { GraphBuilderArg, GraphBuilderReturn } from 'features/nodes/util/graph/types';
|
import type { GraphBuilderArg, GraphBuilderReturn } from 'features/nodes/util/graph/types';
|
||||||
@@ -44,9 +44,7 @@ export const buildGemini2_5Graph = (arg: GraphBuilderArg): GraphBuilderReturn =>
|
|||||||
reference_images = [];
|
reference_images = [];
|
||||||
for (const entity of validRefImages) {
|
for (const entity of validRefImages) {
|
||||||
assert(entity.config.image, 'Image is required for reference image');
|
assert(entity.config.image, 'Image is required for reference image');
|
||||||
reference_images.push({
|
reference_images.push(zImageField.parse(entity.config.image.crop?.image ?? entity.config.image.original.image));
|
||||||
image_name: entity.config.image.crop?.image.image_name ?? entity.config.image.original.image.image_name,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,36 +9,9 @@ const FIELD_VALUE_FALLBACK_MAP: Record<StatefulFieldType['name'], FieldValue> =
|
|||||||
FloatField: 0,
|
FloatField: 0,
|
||||||
ImageField: undefined,
|
ImageField: undefined,
|
||||||
IntegerField: 0,
|
IntegerField: 0,
|
||||||
IPAdapterModelField: undefined,
|
|
||||||
LoRAModelField: undefined,
|
|
||||||
LLaVAModelField: undefined,
|
|
||||||
ModelIdentifierField: undefined,
|
ModelIdentifierField: undefined,
|
||||||
MainModelField: undefined,
|
|
||||||
SchedulerField: 'dpmpp_3m_k',
|
SchedulerField: 'dpmpp_3m_k',
|
||||||
SDXLMainModelField: undefined,
|
|
||||||
FluxMainModelField: undefined,
|
|
||||||
SD3MainModelField: undefined,
|
|
||||||
CogView4MainModelField: undefined,
|
|
||||||
SDXLRefinerModelField: undefined,
|
|
||||||
StringField: '',
|
StringField: '',
|
||||||
T2IAdapterModelField: undefined,
|
|
||||||
SpandrelImageToImageModelField: undefined,
|
|
||||||
VAEModelField: undefined,
|
|
||||||
ControlNetModelField: undefined,
|
|
||||||
T5EncoderModelField: undefined,
|
|
||||||
FluxVAEModelField: undefined,
|
|
||||||
CLIPEmbedModelField: undefined,
|
|
||||||
CLIPLEmbedModelField: undefined,
|
|
||||||
CLIPGEmbedModelField: undefined,
|
|
||||||
ControlLoRAModelField: undefined,
|
|
||||||
SigLipModelField: undefined,
|
|
||||||
FluxReduxModelField: undefined,
|
|
||||||
Imagen3ModelField: undefined,
|
|
||||||
Imagen4ModelField: undefined,
|
|
||||||
ChatGPT4oModelField: undefined,
|
|
||||||
FluxKontextModelField: undefined,
|
|
||||||
Veo3ModelField: undefined,
|
|
||||||
RunwayModelField: undefined,
|
|
||||||
FloatGeneratorField: undefined,
|
FloatGeneratorField: undefined,
|
||||||
IntegerGeneratorField: undefined,
|
IntegerGeneratorField: undefined,
|
||||||
StringGeneratorField: undefined,
|
StringGeneratorField: undefined,
|
||||||
|
|||||||
@@ -3,53 +3,26 @@ import { FieldParseError } from 'features/nodes/types/error';
|
|||||||
import type {
|
import type {
|
||||||
BoardFieldInputTemplate,
|
BoardFieldInputTemplate,
|
||||||
BooleanFieldInputTemplate,
|
BooleanFieldInputTemplate,
|
||||||
ChatGPT4oModelFieldInputTemplate,
|
|
||||||
CLIPEmbedModelFieldInputTemplate,
|
|
||||||
CLIPGEmbedModelFieldInputTemplate,
|
|
||||||
CLIPLEmbedModelFieldInputTemplate,
|
|
||||||
CogView4MainModelFieldInputTemplate,
|
|
||||||
ColorFieldInputTemplate,
|
ColorFieldInputTemplate,
|
||||||
ControlLoRAModelFieldInputTemplate,
|
|
||||||
ControlNetModelFieldInputTemplate,
|
|
||||||
EnumFieldInputTemplate,
|
EnumFieldInputTemplate,
|
||||||
FieldInputTemplate,
|
FieldInputTemplate,
|
||||||
FieldType,
|
FieldType,
|
||||||
FloatFieldCollectionInputTemplate,
|
FloatFieldCollectionInputTemplate,
|
||||||
FloatFieldInputTemplate,
|
FloatFieldInputTemplate,
|
||||||
FloatGeneratorFieldInputTemplate,
|
FloatGeneratorFieldInputTemplate,
|
||||||
FluxKontextModelFieldInputTemplate,
|
|
||||||
FluxMainModelFieldInputTemplate,
|
|
||||||
FluxReduxModelFieldInputTemplate,
|
|
||||||
FluxVAEModelFieldInputTemplate,
|
|
||||||
ImageFieldCollectionInputTemplate,
|
ImageFieldCollectionInputTemplate,
|
||||||
ImageFieldInputTemplate,
|
ImageFieldInputTemplate,
|
||||||
ImageGeneratorFieldInputTemplate,
|
ImageGeneratorFieldInputTemplate,
|
||||||
Imagen3ModelFieldInputTemplate,
|
|
||||||
Imagen4ModelFieldInputTemplate,
|
|
||||||
IntegerFieldCollectionInputTemplate,
|
IntegerFieldCollectionInputTemplate,
|
||||||
IntegerFieldInputTemplate,
|
IntegerFieldInputTemplate,
|
||||||
IntegerGeneratorFieldInputTemplate,
|
IntegerGeneratorFieldInputTemplate,
|
||||||
IPAdapterModelFieldInputTemplate,
|
|
||||||
LLaVAModelFieldInputTemplate,
|
|
||||||
LoRAModelFieldInputTemplate,
|
|
||||||
MainModelFieldInputTemplate,
|
|
||||||
ModelIdentifierFieldInputTemplate,
|
ModelIdentifierFieldInputTemplate,
|
||||||
RunwayModelFieldInputTemplate,
|
|
||||||
SchedulerFieldInputTemplate,
|
SchedulerFieldInputTemplate,
|
||||||
SD3MainModelFieldInputTemplate,
|
|
||||||
SDXLMainModelFieldInputTemplate,
|
|
||||||
SDXLRefinerModelFieldInputTemplate,
|
|
||||||
SigLipModelFieldInputTemplate,
|
|
||||||
SpandrelImageToImageModelFieldInputTemplate,
|
|
||||||
StatefulFieldType,
|
StatefulFieldType,
|
||||||
StatelessFieldInputTemplate,
|
StatelessFieldInputTemplate,
|
||||||
StringFieldCollectionInputTemplate,
|
StringFieldCollectionInputTemplate,
|
||||||
StringFieldInputTemplate,
|
StringFieldInputTemplate,
|
||||||
StringGeneratorFieldInputTemplate,
|
StringGeneratorFieldInputTemplate,
|
||||||
T2IAdapterModelFieldInputTemplate,
|
|
||||||
T5EncoderModelFieldInputTemplate,
|
|
||||||
VAEModelFieldInputTemplate,
|
|
||||||
Veo3ModelFieldInputTemplate,
|
|
||||||
} from 'features/nodes/types/field';
|
} from 'features/nodes/types/field';
|
||||||
import {
|
import {
|
||||||
getFloatGeneratorArithmeticSequenceDefaults,
|
getFloatGeneratorArithmeticSequenceDefaults,
|
||||||
@@ -302,373 +275,6 @@ const buildModelIdentifierFieldInputTemplate: FieldInputTemplateBuilder<ModelIde
|
|||||||
return template;
|
return template;
|
||||||
};
|
};
|
||||||
|
|
||||||
const buildMainModelFieldInputTemplate: FieldInputTemplateBuilder<MainModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: MainModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildSDXLMainModelFieldInputTemplate: FieldInputTemplateBuilder<SDXLMainModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: SDXLMainModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildFluxMainModelFieldInputTemplate: FieldInputTemplateBuilder<FluxMainModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: FluxMainModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildSD3MainModelFieldInputTemplate: FieldInputTemplateBuilder<SD3MainModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: SD3MainModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildCogView4MainModelFieldInputTemplate: FieldInputTemplateBuilder<CogView4MainModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: CogView4MainModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildRefinerModelFieldInputTemplate: FieldInputTemplateBuilder<SDXLRefinerModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: SDXLRefinerModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildVAEModelFieldInputTemplate: FieldInputTemplateBuilder<VAEModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: VAEModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildT5EncoderModelFieldInputTemplate: FieldInputTemplateBuilder<T5EncoderModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: T5EncoderModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildCLIPEmbedModelFieldInputTemplate: FieldInputTemplateBuilder<CLIPEmbedModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: CLIPEmbedModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildCLIPLEmbedModelFieldInputTemplate: FieldInputTemplateBuilder<CLIPLEmbedModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: CLIPLEmbedModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildCLIPGEmbedModelFieldInputTemplate: FieldInputTemplateBuilder<CLIPGEmbedModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: CLIPGEmbedModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildControlLoRAModelFieldInputTemplate: FieldInputTemplateBuilder<ControlLoRAModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: ControlLoRAModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildLLaVAModelFieldInputTemplate: FieldInputTemplateBuilder<LLaVAModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: LLaVAModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildFluxVAEModelFieldInputTemplate: FieldInputTemplateBuilder<FluxVAEModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: FluxVAEModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildLoRAModelFieldInputTemplate: FieldInputTemplateBuilder<LoRAModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: LoRAModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildControlNetModelFieldInputTemplate: FieldInputTemplateBuilder<ControlNetModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: ControlNetModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildIPAdapterModelFieldInputTemplate: FieldInputTemplateBuilder<IPAdapterModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: IPAdapterModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildT2IAdapterModelFieldInputTemplate: FieldInputTemplateBuilder<T2IAdapterModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: T2IAdapterModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildSpandrelImageToImageModelFieldInputTemplate: FieldInputTemplateBuilder<
|
|
||||||
SpandrelImageToImageModelFieldInputTemplate
|
|
||||||
> = ({ schemaObject, baseField, fieldType }) => {
|
|
||||||
const template: SpandrelImageToImageModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildSigLipModelFieldInputTemplate: FieldInputTemplateBuilder<SigLipModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: SigLipModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildFluxReduxModelFieldInputTemplate: FieldInputTemplateBuilder<FluxReduxModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: FluxReduxModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildImagen3ModelFieldInputTemplate: FieldInputTemplateBuilder<Imagen3ModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: Imagen3ModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildImagen4ModelFieldInputTemplate: FieldInputTemplateBuilder<Imagen4ModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: Imagen4ModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildFluxKontextModelFieldInputTemplate: FieldInputTemplateBuilder<FluxKontextModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: FluxKontextModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildVeo3ModelFieldInputTemplate: FieldInputTemplateBuilder<Veo3ModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: Veo3ModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildRunwayModelFieldInputTemplate: FieldInputTemplateBuilder<RunwayModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: RunwayModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildChatGPT4oModelFieldInputTemplate: FieldInputTemplateBuilder<ChatGPT4oModelFieldInputTemplate> = ({
|
|
||||||
schemaObject,
|
|
||||||
baseField,
|
|
||||||
fieldType,
|
|
||||||
}) => {
|
|
||||||
const template: ChatGPT4oModelFieldInputTemplate = {
|
|
||||||
...baseField,
|
|
||||||
type: fieldType,
|
|
||||||
default: schemaObject.default ?? undefined,
|
|
||||||
};
|
|
||||||
return template;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildBoardFieldInputTemplate: FieldInputTemplateBuilder<BoardFieldInputTemplate> = ({
|
const buildBoardFieldInputTemplate: FieldInputTemplateBuilder<BoardFieldInputTemplate> = ({
|
||||||
schemaObject,
|
schemaObject,
|
||||||
baseField,
|
baseField,
|
||||||
@@ -843,56 +449,41 @@ const buildImageGeneratorFieldInputTemplate: FieldInputTemplateBuilder<ImageGene
|
|||||||
return template;
|
return template;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const TEMPLATE_BUILDER_MAP: Record<StatefulFieldType['name'], FieldInputTemplateBuilder> = {
|
const TEMPLATE_BUILDER_MAP: Record<StatefulFieldType['name'], FieldInputTemplateBuilder> = {
|
||||||
BoardField: buildBoardFieldInputTemplate,
|
BoardField: buildBoardFieldInputTemplate,
|
||||||
BooleanField: buildBooleanFieldInputTemplate,
|
BooleanField: buildBooleanFieldInputTemplate,
|
||||||
ColorField: buildColorFieldInputTemplate,
|
ColorField: buildColorFieldInputTemplate,
|
||||||
ControlNetModelField: buildControlNetModelFieldInputTemplate,
|
|
||||||
EnumField: buildEnumFieldInputTemplate,
|
EnumField: buildEnumFieldInputTemplate,
|
||||||
FloatField: buildFloatFieldInputTemplate,
|
FloatField: buildFloatFieldInputTemplate,
|
||||||
ImageField: buildImageFieldInputTemplate,
|
ImageField: buildImageFieldInputTemplate,
|
||||||
IntegerField: buildIntegerFieldInputTemplate,
|
IntegerField: buildIntegerFieldInputTemplate,
|
||||||
IPAdapterModelField: buildIPAdapterModelFieldInputTemplate,
|
|
||||||
LoRAModelField: buildLoRAModelFieldInputTemplate,
|
|
||||||
LLaVAModelField: buildLLaVAModelFieldInputTemplate,
|
|
||||||
ModelIdentifierField: buildModelIdentifierFieldInputTemplate,
|
ModelIdentifierField: buildModelIdentifierFieldInputTemplate,
|
||||||
MainModelField: buildMainModelFieldInputTemplate,
|
|
||||||
SchedulerField: buildSchedulerFieldInputTemplate,
|
SchedulerField: buildSchedulerFieldInputTemplate,
|
||||||
SDXLMainModelField: buildSDXLMainModelFieldInputTemplate,
|
|
||||||
SD3MainModelField: buildSD3MainModelFieldInputTemplate,
|
|
||||||
CogView4MainModelField: buildCogView4MainModelFieldInputTemplate,
|
|
||||||
FluxMainModelField: buildFluxMainModelFieldInputTemplate,
|
|
||||||
SDXLRefinerModelField: buildRefinerModelFieldInputTemplate,
|
|
||||||
StringField: buildStringFieldInputTemplate,
|
StringField: buildStringFieldInputTemplate,
|
||||||
T2IAdapterModelField: buildT2IAdapterModelFieldInputTemplate,
|
|
||||||
SpandrelImageToImageModelField: buildSpandrelImageToImageModelFieldInputTemplate,
|
|
||||||
VAEModelField: buildVAEModelFieldInputTemplate,
|
|
||||||
T5EncoderModelField: buildT5EncoderModelFieldInputTemplate,
|
|
||||||
CLIPEmbedModelField: buildCLIPEmbedModelFieldInputTemplate,
|
|
||||||
CLIPLEmbedModelField: buildCLIPLEmbedModelFieldInputTemplate,
|
|
||||||
CLIPGEmbedModelField: buildCLIPGEmbedModelFieldInputTemplate,
|
|
||||||
FluxVAEModelField: buildFluxVAEModelFieldInputTemplate,
|
|
||||||
ControlLoRAModelField: buildControlLoRAModelFieldInputTemplate,
|
|
||||||
SigLipModelField: buildSigLipModelFieldInputTemplate,
|
|
||||||
FluxReduxModelField: buildFluxReduxModelFieldInputTemplate,
|
|
||||||
Imagen3ModelField: buildImagen3ModelFieldInputTemplate,
|
|
||||||
Imagen4ModelField: buildImagen4ModelFieldInputTemplate,
|
|
||||||
ChatGPT4oModelField: buildChatGPT4oModelFieldInputTemplate,
|
|
||||||
FluxKontextModelField: buildFluxKontextModelFieldInputTemplate,
|
|
||||||
Veo3ModelField: buildVeo3ModelFieldInputTemplate,
|
|
||||||
RunwayModelField: buildRunwayModelFieldInputTemplate,
|
|
||||||
FloatGeneratorField: buildFloatGeneratorFieldInputTemplate,
|
FloatGeneratorField: buildFloatGeneratorFieldInputTemplate,
|
||||||
IntegerGeneratorField: buildIntegerGeneratorFieldInputTemplate,
|
IntegerGeneratorField: buildIntegerGeneratorFieldInputTemplate,
|
||||||
StringGeneratorField: buildStringGeneratorFieldInputTemplate,
|
StringGeneratorField: buildStringGeneratorFieldInputTemplate,
|
||||||
ImageGeneratorField: buildImageGeneratorFieldInputTemplate,
|
ImageGeneratorField: buildImageGeneratorFieldInputTemplate,
|
||||||
} as const;
|
};
|
||||||
|
|
||||||
export const buildFieldInputTemplate = (
|
export const buildFieldInputTemplate = (
|
||||||
fieldSchema: InvocationFieldSchema,
|
fieldSchema: InvocationFieldSchema,
|
||||||
fieldName: string,
|
fieldName: string,
|
||||||
fieldType: FieldType
|
fieldType: FieldType
|
||||||
): FieldInputTemplate => {
|
): FieldInputTemplate => {
|
||||||
const { input, ui_hidden, ui_component, ui_type, ui_order, ui_choice_labels, orig_required: required } = fieldSchema;
|
const {
|
||||||
|
input,
|
||||||
|
ui_hidden,
|
||||||
|
ui_component,
|
||||||
|
ui_type,
|
||||||
|
ui_order,
|
||||||
|
ui_choice_labels,
|
||||||
|
orig_required: required,
|
||||||
|
ui_model_base,
|
||||||
|
ui_model_type,
|
||||||
|
ui_model_variant,
|
||||||
|
ui_model_format,
|
||||||
|
} = fieldSchema;
|
||||||
|
|
||||||
// This is the base field template that is common to all fields. The builder function will add all other
|
// This is the base field template that is common to all fields. The builder function will add all other
|
||||||
// properties to this template.
|
// properties to this template.
|
||||||
@@ -908,6 +499,10 @@ export const buildFieldInputTemplate = (
|
|||||||
ui_type,
|
ui_type,
|
||||||
ui_order,
|
ui_order,
|
||||||
ui_choice_labels,
|
ui_choice_labels,
|
||||||
|
ui_model_base,
|
||||||
|
ui_model_type,
|
||||||
|
ui_model_variant,
|
||||||
|
ui_model_format,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (isStatefulFieldType(fieldType)) {
|
if (isStatefulFieldType(fieldType)) {
|
||||||
|
|||||||
@@ -12,34 +12,25 @@ import {
|
|||||||
isChatGPT4oModelConfig,
|
isChatGPT4oModelConfig,
|
||||||
isCLIPEmbedModelConfig,
|
isCLIPEmbedModelConfig,
|
||||||
isCLIPVisionModelConfig,
|
isCLIPVisionModelConfig,
|
||||||
isCogView4MainModelModelConfig,
|
|
||||||
isControlLayerModelConfig,
|
isControlLayerModelConfig,
|
||||||
isControlLoRAModelConfig,
|
isControlLoRAModelConfig,
|
||||||
isControlNetModelConfig,
|
isControlNetModelConfig,
|
||||||
isFluxKontextApiModelConfig,
|
isFluxKontextApiModelConfig,
|
||||||
isFluxKontextModelConfig,
|
isFluxKontextModelConfig,
|
||||||
isFluxMainModelModelConfig,
|
|
||||||
isFluxReduxModelConfig,
|
isFluxReduxModelConfig,
|
||||||
isFluxVAEModelConfig,
|
isFluxVAEModelConfig,
|
||||||
isGemini2_5ModelConfig,
|
isGemini2_5ModelConfig,
|
||||||
isImagen3ModelConfig,
|
|
||||||
isImagen4ModelConfig,
|
|
||||||
isIPAdapterModelConfig,
|
isIPAdapterModelConfig,
|
||||||
isLLaVAModelConfig,
|
isLLaVAModelConfig,
|
||||||
isLoRAModelConfig,
|
isLoRAModelConfig,
|
||||||
isNonRefinerMainModelConfig,
|
isNonRefinerMainModelConfig,
|
||||||
isNonSDXLMainModelConfig,
|
|
||||||
isRefinerMainModelModelConfig,
|
isRefinerMainModelModelConfig,
|
||||||
isRunwayModelConfig,
|
|
||||||
isSD3MainModelModelConfig,
|
|
||||||
isSDXLMainModelModelConfig,
|
|
||||||
isSigLipModelConfig,
|
isSigLipModelConfig,
|
||||||
isSpandrelImageToImageModelConfig,
|
isSpandrelImageToImageModelConfig,
|
||||||
isT2IAdapterModelConfig,
|
isT2IAdapterModelConfig,
|
||||||
isT5EncoderModelConfig,
|
isT5EncoderModelConfig,
|
||||||
isTIModelConfig,
|
isTIModelConfig,
|
||||||
isVAEModelConfig,
|
isVAEModelConfig,
|
||||||
isVeo3ModelConfig,
|
|
||||||
isVideoModelConfig,
|
isVideoModelConfig,
|
||||||
} from 'services/api/types';
|
} from 'services/api/types';
|
||||||
|
|
||||||
@@ -66,12 +57,7 @@ const buildModelsHook =
|
|||||||
return [modelConfigs, result] as const;
|
return [modelConfigs, result] as const;
|
||||||
};
|
};
|
||||||
export const useMainModels = buildModelsHook(isNonRefinerMainModelConfig);
|
export const useMainModels = buildModelsHook(isNonRefinerMainModelConfig);
|
||||||
export const useNonSDXLMainModels = buildModelsHook(isNonSDXLMainModelConfig);
|
|
||||||
export const useRefinerModels = buildModelsHook(isRefinerMainModelModelConfig);
|
export const useRefinerModels = buildModelsHook(isRefinerMainModelModelConfig);
|
||||||
export const useFluxModels = buildModelsHook(isFluxMainModelModelConfig);
|
|
||||||
export const useSD3Models = buildModelsHook(isSD3MainModelModelConfig);
|
|
||||||
export const useCogView4Models = buildModelsHook(isCogView4MainModelModelConfig);
|
|
||||||
export const useSDXLModels = buildModelsHook(isSDXLMainModelModelConfig);
|
|
||||||
export const useLoRAModels = buildModelsHook(isLoRAModelConfig);
|
export const useLoRAModels = buildModelsHook(isLoRAModelConfig);
|
||||||
export const useControlLoRAModel = buildModelsHook(isControlLoRAModelConfig);
|
export const useControlLoRAModel = buildModelsHook(isControlLoRAModelConfig);
|
||||||
export const useControlLayerModels = buildModelsHook(isControlLayerModelConfig);
|
export const useControlLayerModels = buildModelsHook(isControlLayerModelConfig);
|
||||||
@@ -103,12 +89,6 @@ export const useRegionalReferenceImageModels = buildModelsHook(
|
|||||||
(config) => isIPAdapterModelConfig(config) || isFluxReduxModelConfig(config)
|
(config) => isIPAdapterModelConfig(config) || isFluxReduxModelConfig(config)
|
||||||
);
|
);
|
||||||
export const useLLaVAModels = buildModelsHook(isLLaVAModelConfig);
|
export const useLLaVAModels = buildModelsHook(isLLaVAModelConfig);
|
||||||
export const useImagen3Models = buildModelsHook(isImagen3ModelConfig);
|
|
||||||
export const useImagen4Models = buildModelsHook(isImagen4ModelConfig);
|
|
||||||
export const useChatGPT4oModels = buildModelsHook(isChatGPT4oModelConfig);
|
|
||||||
export const useFluxKontextModels = buildModelsHook(isFluxKontextApiModelConfig);
|
|
||||||
export const useVeo3Models = buildModelsHook(isVeo3ModelConfig);
|
|
||||||
export const useRunwayModels = buildModelsHook(isRunwayModelConfig);
|
|
||||||
export const useVideoModels = buildModelsHook(isVideoModelConfig);
|
export const useVideoModels = buildModelsHook(isVideoModelConfig);
|
||||||
|
|
||||||
const buildModelsSelector =
|
const buildModelsSelector =
|
||||||
|
|||||||
@@ -5580,7 +5580,7 @@ export type components = {
|
|||||||
repo_variant?: components["schemas"]["ModelRepoVariant"] | null;
|
repo_variant?: components["schemas"]["ModelRepoVariant"] | null;
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* ControlNet - SD1.5, SDXL
|
* ControlNet - SD1.5, SD2, SDXL
|
||||||
* @description Collects ControlNet info to pass to other nodes
|
* @description Collects ControlNet info to pass to other nodes
|
||||||
*/
|
*/
|
||||||
ControlNetInvocation: {
|
ControlNetInvocation: {
|
||||||
@@ -11805,6 +11805,26 @@ export type components = {
|
|||||||
ui_choice_labels: {
|
ui_choice_labels: {
|
||||||
[key: string]: string;
|
[key: string]: string;
|
||||||
} | null;
|
} | null;
|
||||||
|
/**
|
||||||
|
* Ui Model Base
|
||||||
|
* @default null
|
||||||
|
*/
|
||||||
|
ui_model_base: components["schemas"]["BaseModelType"][] | null;
|
||||||
|
/**
|
||||||
|
* Ui Model Type
|
||||||
|
* @default null
|
||||||
|
*/
|
||||||
|
ui_model_type: components["schemas"]["ModelType"][] | null;
|
||||||
|
/**
|
||||||
|
* Ui Model Variant
|
||||||
|
* @default null
|
||||||
|
*/
|
||||||
|
ui_model_variant: (components["schemas"]["ClipVariantType"] | components["schemas"]["ModelVariantType"])[] | null;
|
||||||
|
/**
|
||||||
|
* Ui Model Format
|
||||||
|
* @default null
|
||||||
|
*/
|
||||||
|
ui_model_format: components["schemas"]["ModelFormat"][] | null;
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* InstallStatus
|
* InstallStatus
|
||||||
@@ -15163,7 +15183,7 @@ export type components = {
|
|||||||
guidance?: number | null;
|
guidance?: number | null;
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* Main Model - SD1.5
|
* Main Model - SD1.5, SD2
|
||||||
* @description Loads a main model, outputting its submodels.
|
* @description Loads a main model, outputting its submodels.
|
||||||
*/
|
*/
|
||||||
MainModelLoaderInvocation: {
|
MainModelLoaderInvocation: {
|
||||||
@@ -17719,11 +17739,18 @@ export type components = {
|
|||||||
*/
|
*/
|
||||||
OutputFieldJSONSchemaExtra: {
|
OutputFieldJSONSchemaExtra: {
|
||||||
field_kind: components["schemas"]["FieldKind"];
|
field_kind: components["schemas"]["FieldKind"];
|
||||||
/** Ui Hidden */
|
/**
|
||||||
|
* Ui Hidden
|
||||||
|
* @default false
|
||||||
|
*/
|
||||||
ui_hidden: boolean;
|
ui_hidden: boolean;
|
||||||
ui_type: components["schemas"]["UIType"] | null;
|
/**
|
||||||
/** Ui Order */
|
* Ui Order
|
||||||
|
* @default null
|
||||||
|
*/
|
||||||
ui_order: number | null;
|
ui_order: number | null;
|
||||||
|
/** @default null */
|
||||||
|
ui_type: components["schemas"]["UIType"] | null;
|
||||||
};
|
};
|
||||||
/** PaginatedResults[WorkflowRecordListItemWithThumbnailDTO] */
|
/** PaginatedResults[WorkflowRecordListItemWithThumbnailDTO] */
|
||||||
PaginatedResults_WorkflowRecordListItemWithThumbnailDTO_: {
|
PaginatedResults_WorkflowRecordListItemWithThumbnailDTO_: {
|
||||||
@@ -21830,7 +21857,7 @@ export type components = {
|
|||||||
* used, and the type will be ignored. They are included here for backwards compatibility.
|
* used, and the type will be ignored. They are included here for backwards compatibility.
|
||||||
* @enum {string}
|
* @enum {string}
|
||||||
*/
|
*/
|
||||||
UIType: "MainModelField" | "CogView4MainModelField" | "FluxMainModelField" | "SD3MainModelField" | "SDXLMainModelField" | "SDXLRefinerModelField" | "ONNXModelField" | "VAEModelField" | "FluxVAEModelField" | "LoRAModelField" | "ControlNetModelField" | "IPAdapterModelField" | "T2IAdapterModelField" | "T5EncoderModelField" | "CLIPEmbedModelField" | "CLIPLEmbedModelField" | "CLIPGEmbedModelField" | "SpandrelImageToImageModelField" | "ControlLoRAModelField" | "SigLipModelField" | "FluxReduxModelField" | "LLaVAModelField" | "Imagen3ModelField" | "Imagen4ModelField" | "ChatGPT4oModelField" | "Gemini2_5ModelField" | "FluxKontextModelField" | "Veo3ModelField" | "RunwayModelField" | "SchedulerField" | "AnyField" | "VideoField" | "CollectionField" | "CollectionItemField" | "DEPRECATED_Boolean" | "DEPRECATED_Color" | "DEPRECATED_Conditioning" | "DEPRECATED_Control" | "DEPRECATED_Float" | "DEPRECATED_Image" | "DEPRECATED_Integer" | "DEPRECATED_Latents" | "DEPRECATED_String" | "DEPRECATED_BooleanCollection" | "DEPRECATED_ColorCollection" | "DEPRECATED_ConditioningCollection" | "DEPRECATED_ControlCollection" | "DEPRECATED_FloatCollection" | "DEPRECATED_ImageCollection" | "DEPRECATED_IntegerCollection" | "DEPRECATED_LatentsCollection" | "DEPRECATED_StringCollection" | "DEPRECATED_BooleanPolymorphic" | "DEPRECATED_ColorPolymorphic" | "DEPRECATED_ConditioningPolymorphic" | "DEPRECATED_ControlPolymorphic" | "DEPRECATED_FloatPolymorphic" | "DEPRECATED_ImagePolymorphic" | "DEPRECATED_IntegerPolymorphic" | "DEPRECATED_LatentsPolymorphic" | "DEPRECATED_StringPolymorphic" | "DEPRECATED_UNet" | "DEPRECATED_Vae" | "DEPRECATED_CLIP" | "DEPRECATED_Collection" | "DEPRECATED_CollectionItem" | "DEPRECATED_Enum" | "DEPRECATED_WorkflowField" | "DEPRECATED_IsIntermediate" | "DEPRECATED_BoardField" | "DEPRECATED_MetadataItem" | "DEPRECATED_MetadataItemCollection" | "DEPRECATED_MetadataItemPolymorphic" | "DEPRECATED_MetadataDict";
|
UIType: "SchedulerField" | "AnyField" | "CollectionField" | "CollectionItemField" | "IsIntermediate" | "DEPRECATED_Boolean" | "DEPRECATED_Color" | "DEPRECATED_Conditioning" | "DEPRECATED_Control" | "DEPRECATED_Float" | "DEPRECATED_Image" | "DEPRECATED_Integer" | "DEPRECATED_Latents" | "DEPRECATED_String" | "DEPRECATED_BooleanCollection" | "DEPRECATED_ColorCollection" | "DEPRECATED_ConditioningCollection" | "DEPRECATED_ControlCollection" | "DEPRECATED_FloatCollection" | "DEPRECATED_ImageCollection" | "DEPRECATED_IntegerCollection" | "DEPRECATED_LatentsCollection" | "DEPRECATED_StringCollection" | "DEPRECATED_BooleanPolymorphic" | "DEPRECATED_ColorPolymorphic" | "DEPRECATED_ConditioningPolymorphic" | "DEPRECATED_ControlPolymorphic" | "DEPRECATED_FloatPolymorphic" | "DEPRECATED_ImagePolymorphic" | "DEPRECATED_IntegerPolymorphic" | "DEPRECATED_LatentsPolymorphic" | "DEPRECATED_StringPolymorphic" | "DEPRECATED_UNet" | "DEPRECATED_Vae" | "DEPRECATED_CLIP" | "DEPRECATED_Collection" | "DEPRECATED_CollectionItem" | "DEPRECATED_Enum" | "DEPRECATED_WorkflowField" | "DEPRECATED_BoardField" | "DEPRECATED_MetadataItem" | "DEPRECATED_MetadataItemCollection" | "DEPRECATED_MetadataItemPolymorphic" | "DEPRECATED_MetadataDict" | "DEPRECATED_MainModelField" | "DEPRECATED_CogView4MainModelField" | "DEPRECATED_FluxMainModelField" | "DEPRECATED_SD3MainModelField" | "DEPRECATED_SDXLMainModelField" | "DEPRECATED_SDXLRefinerModelField" | "DEPRECATED_ONNXModelField" | "DEPRECATED_VAEModelField" | "DEPRECATED_FluxVAEModelField" | "DEPRECATED_LoRAModelField" | "DEPRECATED_ControlNetModelField" | "DEPRECATED_IPAdapterModelField" | "DEPRECATED_T2IAdapterModelField" | "DEPRECATED_T5EncoderModelField" | "DEPRECATED_CLIPEmbedModelField" | "DEPRECATED_CLIPLEmbedModelField" | "DEPRECATED_CLIPGEmbedModelField" | "DEPRECATED_SpandrelImageToImageModelField" | "DEPRECATED_ControlLoRAModelField" | "DEPRECATED_SigLipModelField" | "DEPRECATED_FluxReduxModelField" | "DEPRECATED_LLaVAModelField" | "DEPRECATED_Imagen3ModelField" | "DEPRECATED_Imagen4ModelField" | "DEPRECATED_ChatGPT4oModelField" | "DEPRECATED_Gemini2_5ModelField" | "DEPRECATED_FluxKontextModelField" | "DEPRECATED_Veo3ModelField" | "DEPRECATED_RunwayModelField";
|
||||||
/** UNetField */
|
/** UNetField */
|
||||||
UNetField: {
|
UNetField: {
|
||||||
/** @description Info to load unet submodel */
|
/** @description Info to load unet submodel */
|
||||||
@@ -22176,7 +22203,7 @@ export type components = {
|
|||||||
seamless_axes?: string[];
|
seamless_axes?: string[];
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* VAE Model - SD1.5, SDXL, SD3, FLUX
|
* VAE Model - SD1.5, SD2, SDXL, SD3, FLUX
|
||||||
* @description Loads a VAE model, outputting a VaeLoaderOutput
|
* @description Loads a VAE model, outputting a VaeLoaderOutput
|
||||||
*/
|
*/
|
||||||
VAELoaderInvocation: {
|
VAELoaderInvocation: {
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ export type T2IAdapterModelConfig = S['T2IAdapterConfig'];
|
|||||||
export type CLIPLEmbedModelConfig = S['CLIPLEmbedDiffusersConfig'];
|
export type CLIPLEmbedModelConfig = S['CLIPLEmbedDiffusersConfig'];
|
||||||
export type CLIPGEmbedModelConfig = S['CLIPGEmbedDiffusersConfig'];
|
export type CLIPGEmbedModelConfig = S['CLIPGEmbedDiffusersConfig'];
|
||||||
export type CLIPEmbedModelConfig = CLIPLEmbedModelConfig | CLIPGEmbedModelConfig;
|
export type CLIPEmbedModelConfig = CLIPLEmbedModelConfig | CLIPGEmbedModelConfig;
|
||||||
export type LlavaOnevisionConfig = S['LlavaOnevisionConfig'];
|
type LlavaOnevisionConfig = S['LlavaOnevisionConfig'];
|
||||||
export type T5EncoderModelConfig = S['T5EncoderConfig'];
|
export type T5EncoderModelConfig = S['T5EncoderConfig'];
|
||||||
export type T5EncoderBnbQuantizedLlmInt8bModelConfig = S['T5EncoderBnbQuantizedLlmInt8bConfig'];
|
export type T5EncoderBnbQuantizedLlmInt8bModelConfig = S['T5EncoderBnbQuantizedLlmInt8bConfig'];
|
||||||
export type SpandrelImageToImageModelConfig = S['SpandrelImageToImageConfig'];
|
export type SpandrelImageToImageModelConfig = S['SpandrelImageToImageConfig'];
|
||||||
@@ -130,16 +130,14 @@ type TextualInversionModelConfig = S['TextualInversionFileConfig'] | S['TextualI
|
|||||||
type DiffusersModelConfig = S['MainDiffusersConfig'];
|
type DiffusersModelConfig = S['MainDiffusersConfig'];
|
||||||
export type CheckpointModelConfig = S['MainCheckpointConfig'];
|
export type CheckpointModelConfig = S['MainCheckpointConfig'];
|
||||||
type CLIPVisionDiffusersConfig = S['CLIPVisionDiffusersConfig'];
|
type CLIPVisionDiffusersConfig = S['CLIPVisionDiffusersConfig'];
|
||||||
export type SigLipModelConfig = S['SigLIPConfig'];
|
type SigLipModelConfig = S['SigLIPConfig'];
|
||||||
export type FLUXReduxModelConfig = S['FluxReduxConfig'];
|
export type FLUXReduxModelConfig = S['FluxReduxConfig'];
|
||||||
export type ApiModelConfig = S['ApiModelConfig'];
|
type ApiModelConfig = S['ApiModelConfig'];
|
||||||
export type VideoApiModelConfig = S['VideoApiModelConfig'];
|
export type VideoApiModelConfig = S['VideoApiModelConfig'];
|
||||||
export type MainModelConfig = DiffusersModelConfig | CheckpointModelConfig | ApiModelConfig;
|
export type MainModelConfig = DiffusersModelConfig | CheckpointModelConfig | ApiModelConfig;
|
||||||
export type FLUXKontextModelConfig = MainModelConfig;
|
export type FLUXKontextModelConfig = MainModelConfig;
|
||||||
export type ChatGPT4oModelConfig = ApiModelConfig;
|
export type ChatGPT4oModelConfig = ApiModelConfig;
|
||||||
export type Gemini2_5ModelConfig = ApiModelConfig;
|
export type Gemini2_5ModelConfig = ApiModelConfig;
|
||||||
type Veo3ModelConfig = VideoApiModelConfig;
|
|
||||||
type RunwayModelConfig = VideoApiModelConfig;
|
|
||||||
export type AnyModelConfig =
|
export type AnyModelConfig =
|
||||||
| ControlLoRAModelConfig
|
| ControlLoRAModelConfig
|
||||||
| LoRAModelConfig
|
| LoRAModelConfig
|
||||||
@@ -310,22 +308,6 @@ export const isVideoModelConfig = (config: AnyModelConfig): config is VideoApiMo
|
|||||||
return config.type === 'video';
|
return config.type === 'video';
|
||||||
};
|
};
|
||||||
|
|
||||||
export const isVeo3ModelConfig = (config: AnyModelConfig): config is Veo3ModelConfig => {
|
|
||||||
return config.base === 'veo3' && config.type === 'video';
|
|
||||||
};
|
|
||||||
|
|
||||||
export const isRunwayModelConfig = (config: AnyModelConfig): config is RunwayModelConfig => {
|
|
||||||
return config.base === 'runway' && config.type === 'video';
|
|
||||||
};
|
|
||||||
|
|
||||||
export const isImagen3ModelConfig = (config: AnyModelConfig): config is ApiModelConfig => {
|
|
||||||
return config.type === 'main' && config.base === 'imagen3';
|
|
||||||
};
|
|
||||||
|
|
||||||
export const isImagen4ModelConfig = (config: AnyModelConfig): config is ApiModelConfig => {
|
|
||||||
return config.type === 'main' && config.base === 'imagen4';
|
|
||||||
};
|
|
||||||
|
|
||||||
export const isFluxKontextApiModelConfig = (config: AnyModelConfig): config is ApiModelConfig => {
|
export const isFluxKontextApiModelConfig = (config: AnyModelConfig): config is ApiModelConfig => {
|
||||||
return config.type === 'main' && config.base === 'flux-kontext';
|
return config.type === 'main' && config.base === 'flux-kontext';
|
||||||
};
|
};
|
||||||
@@ -350,30 +332,10 @@ export const isRefinerMainModelModelConfig = (config: AnyModelConfig): config is
|
|||||||
return config.type === 'main' && config.base === 'sdxl-refiner';
|
return config.type === 'main' && config.base === 'sdxl-refiner';
|
||||||
};
|
};
|
||||||
|
|
||||||
export const isSDXLMainModelModelConfig = (config: AnyModelConfig): config is MainModelConfig => {
|
|
||||||
return config.type === 'main' && config.base === 'sdxl';
|
|
||||||
};
|
|
||||||
|
|
||||||
export const isSD3MainModelModelConfig = (config: AnyModelConfig): config is MainModelConfig => {
|
|
||||||
return config.type === 'main' && config.base === 'sd-3';
|
|
||||||
};
|
|
||||||
|
|
||||||
export const isCogView4MainModelModelConfig = (config: AnyModelConfig): config is MainModelConfig => {
|
|
||||||
return config.type === 'main' && config.base === 'cogview4';
|
|
||||||
};
|
|
||||||
|
|
||||||
export const isFluxMainModelModelConfig = (config: AnyModelConfig): config is MainModelConfig => {
|
|
||||||
return config.type === 'main' && config.base === 'flux';
|
|
||||||
};
|
|
||||||
|
|
||||||
export const isFluxFillMainModelModelConfig = (config: AnyModelConfig): config is MainModelConfig => {
|
export const isFluxFillMainModelModelConfig = (config: AnyModelConfig): config is MainModelConfig => {
|
||||||
return config.type === 'main' && config.base === 'flux' && config.variant === 'inpaint';
|
return config.type === 'main' && config.base === 'flux' && config.variant === 'inpaint';
|
||||||
};
|
};
|
||||||
|
|
||||||
export const isNonSDXLMainModelConfig = (config: AnyModelConfig): config is MainModelConfig => {
|
|
||||||
return config.type === 'main' && (config.base === 'sd-1' || config.base === 'sd-2');
|
|
||||||
};
|
|
||||||
|
|
||||||
export const isTIModelConfig = (config: AnyModelConfig): config is MainModelConfig => {
|
export const isTIModelConfig = (config: AnyModelConfig): config is MainModelConfig => {
|
||||||
return config.type === 'embedding';
|
return config.type === 'embedding';
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user