| | 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() |
| |
|