85 lines
4.2 KiB
Markdown
85 lines
4.2 KiB
Markdown
# Documentation
|
|
- Class name: RandomPrompt
|
|
- Category: ♾️Mixlab/Prompt
|
|
- Output node: True
|
|
- Repo Ref: https://github.com/shadowcz007/comfyui-mixlab-nodes.git
|
|
|
|
RandomPrompt节点旨在通过组合可变和不可变文本元素生成多样化的提示集。它通过将提供的提示分割成单独的单词或短语,然后以各种组合重新组装它们来操作。该节点还提供了功能,可以基于指定的最大计数随机抽样一部分生成的提示,或返回所有提示。该过程旨在为进一步处理或分析创建广泛的文本输入。
|
|
|
|
# Input types
|
|
## Required
|
|
- max_count
|
|
- 参数'max_count'确定要生成或抽样的最大提示数量。它在控制输出大小和确保节点的执行与所需的多样性水平一致,同时避免压垮下游流程中起着关键作用。
|
|
- Comfy dtype: INT
|
|
- Python dtype: int
|
|
- mutable_prompt
|
|
- 参数'mutable_prompt'是用户在节点操作期间可以更改或与其他提示组合的字符串。它之所以重要,是因为它构成了生成提示的可变性基础,允许广泛的潜在输出。
|
|
- Comfy dtype: STRING
|
|
- Python dtype: str
|
|
- immutable_prompt
|
|
- 参数'immutable_prompt'是在节点执行期间保持不变的固定字符串。它作为一个常量元素,与可变提示合并,以在最终提示集中产生一致的结构。
|
|
- Comfy dtype: STRING
|
|
- Python dtype: str
|
|
## Optional
|
|
- random_sample
|
|
- 参数'random_sample'指示节点是否应随机选择生成提示的子集。启用时,它为选择过程引入了随机性元素,这对于需要多样化但有限的提示集的某些应用可能是有益的。
|
|
- Comfy dtype: COMBO['enable', 'disable']
|
|
- Python dtype: str
|
|
- seed
|
|
- 参数'seed'用于初始化随机抽样过程中的随机数生成器。当提供特定的种子值时,它确保结果的可复现性,允许节点在多次执行中获得一致的结果。
|
|
- Comfy dtype: any_type
|
|
- Python dtype: int
|
|
|
|
# Output types
|
|
- prompts
|
|
- 输出'prompts'是由可变和不可变文本元素组合生成的文本提示列表。它代表了节点执行的主要结果,对于使用这些提示进行进一步处理或分析的应用来说非常重要。
|
|
- Comfy dtype: STRING
|
|
- Python dtype: List[str]
|
|
|
|
# Usage tips
|
|
- Infra type: CPU
|
|
|
|
# Source code
|
|
```
|
|
class RandomPrompt:
|
|
"""
|
|
@classmethod 是Python中的一个装饰器,用于将一个方法标记为类方法。
|
|
类方法是与类相关联的方法,而不是与实例相关联的方法。
|
|
这意味着类方法可以直接通过类进行调用,而不需要先创建一个类的实例。
|
|
"""
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(s):
|
|
return {'required': {'max_count': ('INT', {'default': 9, 'min': 1, 'max': 1000}), 'mutable_prompt': ('STRING', {'multiline': True, 'default': default_prompt1}), 'immutable_prompt': ('STRING', {'multiline': True, 'default': 'sticker, Cartoon, ``'}), 'random_sample': (['enable', 'disable'],)}, 'optional': {'seed': (any_type, {'default': 0, 'min': 0, 'max': 18446744073709551615})}}
|
|
RETURN_TYPES = ('STRING',)
|
|
FUNCTION = 'run'
|
|
CATEGORY = '♾️Mixlab/Prompt'
|
|
OUTPUT_IS_LIST = (True,)
|
|
OUTPUT_NODE = True
|
|
|
|
def run(self, max_count, mutable_prompt, immutable_prompt, random_sample, seed=0):
|
|
words1 = mutable_prompt.split('\n')
|
|
words2 = immutable_prompt.split('\n')
|
|
pbar = comfy.utils.ProgressBar(len(words1) * len(words2))
|
|
prompts = []
|
|
for w1 in words1:
|
|
w1 = w1.strip()
|
|
for w2 in words2:
|
|
w2 = w2.strip()
|
|
if '``' not in w2:
|
|
if w2 == '':
|
|
w2 = '``'
|
|
else:
|
|
w2 = w2 + ',``'
|
|
if w1 != '' and w2 != '':
|
|
prompts.append(w2.replace('``', w1))
|
|
pbar.update(1)
|
|
if len(prompts) == 0:
|
|
prompts.append(immutable_prompt)
|
|
if random_sample == 'enable':
|
|
prompts = random.sample(prompts, min(max_count, len(prompts)))
|
|
else:
|
|
prompts = prompts[:min(max_count, len(prompts))]
|
|
prompts = [elem.strip() for elem in prompts if elem.strip()]
|
|
return {'ui': {'prompts': prompts}, 'result': (prompts,)}
|
|
``` |