96 lines
4.5 KiB
Markdown
96 lines
4.5 KiB
Markdown
# Documentation
|
|
- Class name: TextCombinations2
|
|
- Category: Mikey/Text
|
|
- Output node: False
|
|
- Repo Ref: https://github.com/bash-j/mikey_nodes
|
|
|
|
TextCombinations2节点旨在生成一系列文本操作,这些操作以定义的操作方式结合两个输入文本。它通过在输入上执行指定的操作来促进输出文本的创建,提供了文本处理的灵活性。
|
|
|
|
# Input types
|
|
## Required
|
|
- text1
|
|
- 'text1'参数是将在组合操作中使用的第一种输入文本。它在确定最终输出中起着关键作用,因为它是被操作的主要元素之一。
|
|
- Comfy dtype: STRING
|
|
- Python dtype: str
|
|
- text2
|
|
- 'text2'参数是与'text1'通过定义的操作结合的第二种输入文本。它的内容对于输出生成过程至关重要。
|
|
- Comfy dtype: STRING
|
|
- Python dtype: str
|
|
- operation
|
|
- 'operation'参数定义了要在输入文本上执行的特定组合操作。它至关重要,因为它决定了如何将'text1'和'text2'转换为所需的输出。
|
|
- Comfy dtype: COMBO['text1 to output1', 'text2 to output2']
|
|
- Python dtype: str
|
|
## Optional
|
|
- delimiter
|
|
- 'delimiter'参数指定在操作期间连接文本组件时使用字符或字符串。它影响最终输出的格式。
|
|
- Comfy dtype: STRING
|
|
- Python dtype: str
|
|
- use_seed
|
|
- 'use_seed'参数决定是否应使用种子值从预定义的操作列表中选择一个操作。它为操作选择过程增加了随机性或特定性。
|
|
- Comfy dtype: COMBO['true', 'false']
|
|
- Python dtype: str
|
|
- seed
|
|
- 'seed'参数是一个整数值,当'use_seed'设置为true时,用于偏移操作的选择。它确保根据提供的整数选择特定的操作。
|
|
- Comfy dtype: INT
|
|
- Python dtype: int
|
|
- extra_pnginfo
|
|
- 'extra_pnginfo'参数保存可能需要用于某些操作的额外信息。它用于根据额外的上下文数据影响节点的行为。
|
|
- Comfy dtype: EXTRA_PNGINFO
|
|
- Python dtype: Union[Dict, str]
|
|
- prompt
|
|
- 'prompt'参数为节点提供指导或额外的上下文,可能会改变其处理输入文本的方式。它对于需要交互式或条件行为的节点特别有用。
|
|
- Comfy dtype: PROMPT
|
|
- Python dtype: Union[Dict, str]
|
|
|
|
# Output types
|
|
- output1
|
|
- 'output1'参数代表组合操作后的第一个结果文本。它是输入和指定操作的直接结果。
|
|
- Comfy dtype: STRING
|
|
- Python dtype: str
|
|
- output2
|
|
- 'output2'参数代表组合操作后的第二个结果文本。它是从输入和执行的操作派生出的另一个输出。
|
|
- Comfy dtype: STRING
|
|
- Python dtype: str
|
|
|
|
# Usage tips
|
|
- Infra type: CPU
|
|
|
|
# Source code
|
|
```
|
|
class TextCombinations2:
|
|
texts = ['text1', 'text2', 'text1 + text2']
|
|
outputs = ['output1', 'output2']
|
|
|
|
@classmethod
|
|
def generate_combinations(cls, texts, outputs):
|
|
operations = []
|
|
for (output1, output2) in product(texts, repeat=len(outputs)):
|
|
operation = f'{output1} to {outputs[0]}, {output2} to {outputs[1]}'
|
|
operations.append(operation)
|
|
return operations
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
cls.operations = cls.generate_combinations(cls.texts, cls.outputs)
|
|
return {'required': {'text1': ('STRING', {'multiline': True, 'default': 'Text 1'}), 'text2': ('STRING', {'multiline': True, 'default': 'Text 2'}), 'operation': (cls.operations, {'default': cls.operations[0]}), 'delimiter': ('STRING', {'default': ' '}), 'use_seed': (['true', 'false'], {'default': 'false'}), 'seed': ('INT', {'default': 0, 'min': 0, 'max': 18446744073709551615})}, 'hidden': {'extra_pnginfo': 'EXTRA_PNGINFO', 'prompt': 'PROMPT'}}
|
|
RETURN_TYPES = ('STRING', 'STRING')
|
|
RETURN_NAMES = ('output1', 'output2')
|
|
FUNCTION = 'mix'
|
|
CATEGORY = 'Mikey/Text'
|
|
|
|
def mix(self, text1, text2, operation, delimiter, use_seed, seed, extra_pnginfo, prompt):
|
|
text1 = search_and_replace(text1, extra_pnginfo, prompt)
|
|
text2 = search_and_replace(text2, extra_pnginfo, prompt)
|
|
text_dict = {'text1': text1, 'text2': text2}
|
|
if use_seed == 'true' and len(self.operations) > 0:
|
|
offset = seed % len(self.operations)
|
|
operation = self.operations[offset]
|
|
ops = operation.split(', ')
|
|
output_texts = [op.split(' to ')[0] for op in ops]
|
|
outputs = []
|
|
for output_text in output_texts:
|
|
components = output_text.split(' + ')
|
|
final_output = delimiter.join((eval(comp, {}, text_dict) for comp in components))
|
|
outputs.append(final_output)
|
|
return tuple(outputs)
|
|
``` |