Files
2024-05-28 17:04:42 +08:00

52 lines
1.4 KiB
Python

import torch
class MultiTextEncode:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"clip": ("CLIP", ),
"textList": ("LIST",),
},
"optional": {
"pre_text": ("STRING", {"multiline": True, }),
"app_text": ("STRING", {"multiline": True, }),
},
}
RETURN_TYPES = ("CONDITIONING",)
FUNCTION = "multi_text_set_area"
CATEGORY = "lam"
def multi_text_set_area(self,clip,textList,pre_text='',app_text=''):
if len(textList)==0:
raise Exception('至少要输入一个文本')
pooled_out = []
cond_out = []
for i in range(len(textList)):
cond, pooled=self.encode(clip,pre_text+' '+textList[i]+' '+app_text)
cond_out.append(cond)
pooled_out.append(pooled)
final_pooled_output = torch.cat(pooled_out, dim=0)
final_conditioning = torch.cat(cond_out, dim=0)
return ([[final_conditioning, {"pooled_output": final_pooled_output}]],)
def encode(self, clip, text):
tokens = clip.tokenize(text)
cond, pooled = clip.encode_from_tokens(tokens, return_pooled=True)
return cond, pooled
NODE_CLASS_MAPPINGS = {
"MultiTextEncode": MultiTextEncode
}
NODE_DISPLAY_NAME_MAPPINGS = {
"MultiTextEncode": "多文本CLIP批量编码"
}