feat: clip model
This commit is contained in:
@@ -2,6 +2,7 @@ from .src.nodes import (
|
||||
NODE_CLASS_MAPPINGS,
|
||||
NODE_DISPLAY_NAME_MAPPINGS,
|
||||
ComfyUIAutoencoderDTO,
|
||||
ComfyUIClipDTO,
|
||||
ComfyUIPipelineDTO,
|
||||
)
|
||||
|
||||
@@ -10,4 +11,5 @@ __all__ = [
|
||||
"NODE_DISPLAY_NAME_MAPPINGS",
|
||||
"ComfyUIPipelineDTO",
|
||||
"ComfyUIAutoencoderDTO",
|
||||
"ComfyUIClipDTO",
|
||||
]
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
from ._autoencoder import Autoencoder
|
||||
from ._clip import Clip
|
||||
from ._pipeline import Pipeline
|
||||
|
||||
__all__ = [
|
||||
"Pipeline",
|
||||
"Autoencoder",
|
||||
"Clip",
|
||||
]
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
from dataclasses import dataclass
|
||||
|
||||
from transformers import CLIPTextModel, CLIPTokenizer
|
||||
|
||||
|
||||
@dataclass
|
||||
class Clip:
|
||||
tokenizer: CLIPTokenizer
|
||||
text_encoder: CLIPTextModel
|
||||
path: str
|
||||
@@ -1,7 +1,7 @@
|
||||
from ..di import Container
|
||||
from ._diffusers_pipeline_loader import DiffusersPipelineLoader
|
||||
from ._diffusers_vae_loader import DiffusersVaeLoader
|
||||
from .dto import ComfyUIAutoencoderDTO, ComfyUIPipelineDTO
|
||||
from .dto import ComfyUIAutoencoderDTO, ComfyUIClipDTO, ComfyUIPipelineDTO
|
||||
|
||||
container = Container()
|
||||
container.wire(modules=[__name__])
|
||||
@@ -20,4 +20,5 @@ __all__ = [
|
||||
"NODE_DISPLAY_NAME_MAPPINGS",
|
||||
"ComfyUIPipelineDTO",
|
||||
"ComfyUIAutoencoderDTO",
|
||||
"ComfyUIClipDTO",
|
||||
]
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
from ._autoencoder_dto import ComfyUIAutoencoderDTO
|
||||
from ._clip import ComfyUIClipDTO
|
||||
from ._pipeline_dto import ComfyUIPipelineDTO
|
||||
|
||||
__all__ = ["ComfyUIPipelineDTO", "ComfyUIAutoencoderDTO"]
|
||||
__all__ = ["ComfyUIPipelineDTO", "ComfyUIAutoencoderDTO", "ComfyUIClipDTO"]
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
from dataclasses import dataclass
|
||||
from typing import ClassVar
|
||||
|
||||
from transformers import CLIPTextModel, CLIPTokenizer
|
||||
|
||||
from ...domain.model import Clip
|
||||
|
||||
|
||||
@dataclass
|
||||
class ComfyUIClipDTO:
|
||||
"""Data Transfer Object for CLIP (Tokenizer and Text Encoder) in ComfyUI.
|
||||
|
||||
This DTO is designed to be used across different custom nodes.
|
||||
Other node developers can import and use this type for CLIP operations.
|
||||
|
||||
Attributes:
|
||||
tokenizer: CLIPTokenizer instance from transformers library
|
||||
text_encoder: CLIPTextModel instance from transformers library
|
||||
path: Path to the loaded model directory
|
||||
|
||||
Class Attributes:
|
||||
COMFY_TYPE: Type name used in ComfyUI's RETURN_TYPES and INPUT_TYPES
|
||||
|
||||
Example:
|
||||
```python
|
||||
from your_node_package.nodes.dto import ComfyUIClipDTO
|
||||
|
||||
class YourCustomNode:
|
||||
@classmethod
|
||||
def INPUT_TYPES(cls):
|
||||
return {"required": {"clip": (ComfyUIClipDTO.COMFY_TYPE,)}}
|
||||
|
||||
RETURN_TYPES = (ComfyUIClipDTO.COMFY_TYPE,)
|
||||
|
||||
def execute(self, clip: ComfyUIClipDTO):
|
||||
# Use the tokenizer and text encoder
|
||||
tokens = clip.tokenizer(prompt, return_tensors="pt")
|
||||
embeddings = clip.text_encoder(**tokens)
|
||||
return (embeddings,)
|
||||
```
|
||||
"""
|
||||
|
||||
# ClassVar to avoid being treated as a dataclass field
|
||||
COMFY_TYPE: ClassVar[str] = "DIFFUSERS_CLIP"
|
||||
|
||||
tokenizer: CLIPTokenizer
|
||||
text_encoder: CLIPTextModel
|
||||
path: str
|
||||
|
||||
@classmethod
|
||||
def from_domain(cls, clip: Clip) -> "ComfyUIClipDTO":
|
||||
"""Create DTO from domain model.
|
||||
|
||||
Args:
|
||||
clip: Clip from domain layer
|
||||
|
||||
Returns:
|
||||
ComfyUIClipDTO instance
|
||||
"""
|
||||
return cls(tokenizer=clip.tokenizer, text_encoder=clip.text_encoder, path=clip.path)
|
||||
Reference in New Issue
Block a user