|
|
from typing_extensions import override |
|
|
|
|
|
from comfy_api.latest import ComfyExtension, io |
|
|
|
|
|
|
|
|
class CLIPTextEncodeControlnet(io.ComfyNode): |
|
|
@classmethod |
|
|
def define_schema(cls) -> io.Schema: |
|
|
return io.Schema( |
|
|
node_id="CLIPTextEncodeControlnet", |
|
|
category="_for_testing/conditioning", |
|
|
inputs=[ |
|
|
io.Clip.Input("clip"), |
|
|
io.Conditioning.Input("conditioning"), |
|
|
io.String.Input("text", multiline=True, dynamic_prompts=True), |
|
|
], |
|
|
outputs=[io.Conditioning.Output()], |
|
|
is_experimental=True, |
|
|
) |
|
|
|
|
|
@classmethod |
|
|
def execute(cls, clip, conditioning, text) -> io.NodeOutput: |
|
|
tokens = clip.tokenize(text) |
|
|
cond, pooled = clip.encode_from_tokens(tokens, return_pooled=True) |
|
|
c = [] |
|
|
for t in conditioning: |
|
|
n = [t[0], t[1].copy()] |
|
|
n[1]['cross_attn_controlnet'] = cond |
|
|
n[1]['pooled_output_controlnet'] = pooled |
|
|
c.append(n) |
|
|
return io.NodeOutput(c) |
|
|
|
|
|
class T5TokenizerOptions(io.ComfyNode): |
|
|
@classmethod |
|
|
def define_schema(cls) -> io.Schema: |
|
|
return io.Schema( |
|
|
node_id="T5TokenizerOptions", |
|
|
category="_for_testing/conditioning", |
|
|
inputs=[ |
|
|
io.Clip.Input("clip"), |
|
|
io.Int.Input("min_padding", default=0, min=0, max=10000, step=1), |
|
|
io.Int.Input("min_length", default=0, min=0, max=10000, step=1), |
|
|
], |
|
|
outputs=[io.Clip.Output()], |
|
|
is_experimental=True, |
|
|
) |
|
|
|
|
|
@classmethod |
|
|
def execute(cls, clip, min_padding, min_length) -> io.NodeOutput: |
|
|
clip = clip.clone() |
|
|
for t5_type in ["t5xxl", "pile_t5xl", "t5base", "mt5xl", "umt5xxl"]: |
|
|
clip.set_tokenizer_option("{}_min_padding".format(t5_type), min_padding) |
|
|
clip.set_tokenizer_option("{}_min_length".format(t5_type), min_length) |
|
|
|
|
|
return io.NodeOutput(clip) |
|
|
|
|
|
|
|
|
class CondExtension(ComfyExtension): |
|
|
@override |
|
|
async def get_node_list(self) -> list[type[io.ComfyNode]]: |
|
|
return [ |
|
|
CLIPTextEncodeControlnet, |
|
|
T5TokenizerOptions, |
|
|
] |
|
|
|
|
|
|
|
|
async def comfy_entrypoint() -> CondExtension: |
|
|
return CondExtension() |
|
|
|