feat: clip model

This commit is contained in:
Limitex
2025-11-02 23:05:21 +09:00
parent c87630816b
commit f0f22cab08
6 changed files with 78 additions and 2 deletions
+2
View File
@@ -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",
]
+2
View File
@@ -1,7 +1,9 @@
from ._autoencoder import Autoencoder
from ._clip import Clip
from ._pipeline import Pipeline
__all__ = [
"Pipeline",
"Autoencoder",
"Clip",
]
+10
View File
@@ -0,0 +1,10 @@
from dataclasses import dataclass
from transformers import CLIPTextModel, CLIPTokenizer
@dataclass
class Clip:
tokenizer: CLIPTokenizer
text_encoder: CLIPTextModel
path: str
+2 -1
View File
@@ -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",
]
+2 -1
View File
@@ -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"]
+60
View File
@@ -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)