Files
CavinHuang-comfyui-nodes-docs/docs/easy XYPlotAdvanced.md
2024-05-26 20:35:16 +08:00

209 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Documentation
- Class name: pipeXYPlotAdvanced
- Category: EasyUse/Pipe
- Output node: False
- Repo Ref: https://github.com/yolain/ComfyUI-Easy-Use.git
该节点提供高级XY绘图功能,专为满足管道线路的需求而设计。它与各种数据类型和设置集成,以生成可视化图表,提供对管道内数据结构和关系的洞察。节点的设计强调适应性和易用性,确保用户能够快速生成有意义的可视化图表,而无需进行广泛的配置。
# Input types
## Required
- pipe
- ‘pipe’参数是此节点的主干,代表从中提取和可视化数据的管道线路。它对节点的运行至关重要,因为它包含了绘图所需的所有必要信息和设置。
- Comfy dtype: PIPE_LINE
- Python dtype: Dict
- grid_spacing
- ‘grid_spacing’参数决定了图表中网格线之间的间距,影响可视化的整体清晰度和可读性。它在以易于理解的方式呈现数据点和趋势方面发挥着重要作用。
- Comfy dtype: INT
- Python dtype: int
- output_individuals
- ‘output_individuals’参数允许用户控制是否在图表中单独显示各个数据点。这对于分析特定数据点及其在数据集中的关系非常重要。
- Comfy dtype: BOOL
- Python dtype: bool
- flip_xy
- ‘flip_xy’参数允许用户翻转X轴和Y轴,这在某些数据可视化场景中非常有用,尤其是当传统方向不是最佳选择时。
- Comfy dtype: BOOL
- Python dtype: bool
## Optional
- X
- ‘X’参数代表X轴的配置,包括轴标签和相关值。它对于定义图表的水平维度至关重要,并且可以通过各种模型和设置进行定制。
- Comfy dtype: X_Y
- Python dtype: Dict
- Y
- ‘Y’参数对应于Y轴的配置,指定轴标签和相应的值。它对于建立图表的垂直维度至关重要,并且可以通过不同的模型和设置进行调整。
- Comfy dtype: X_Y
- Python dtype: Dict
# Output types
- pipe
- ‘pipe’输出是输入‘pipe’的更新版本,现在包含了生成的XY图表信息。它代表了管道的进展,将可视化结果重新整合到数据流中,以便进一步分析或处理。
- Comfy dtype: PIPE_LINE
- Python dtype: Dict
# Usage tips
- Infra type: CPU
# Source code
```
class pipeXYPlotAdvanced:
@classmethod
def INPUT_TYPES(s):
return {'required': {'pipe': ('PIPE_LINE',), 'grid_spacing': ('INT', {'min': 0, 'max': 500, 'step': 5, 'default': 0}), 'output_individuals': (['False', 'True'], {'default': 'False'}), 'flip_xy': (['False', 'True'], {'default': 'False'})}, 'optional': {'X': ('X_Y',), 'Y': ('X_Y',)}, 'hidden': {'my_unique_id': 'UNIQUE_ID'}}
RETURN_TYPES = ('PIPE_LINE',)
RETURN_NAMES = ('pipe',)
FUNCTION = 'plot'
CATEGORY = 'EasyUse/Pipe'
def plot(self, pipe, grid_spacing, output_individuals, flip_xy, X=None, Y=None, my_unique_id=None):
if X != None:
x_axis = X.get('axis')
x_values = X.get('values')
else:
x_axis = 'Nothing'
x_values = ['']
if Y != None:
y_axis = Y.get('axis')
y_values = Y.get('values')
else:
y_axis = 'Nothing'
y_values = ['']
if pipe is not None:
new_pipe = pipe
positive = pipe['loader_settings']['positive'] if 'positive' in pipe['loader_settings'] else ''
negative = pipe['loader_settings']['negative'] if 'negative' in pipe['loader_settings'] else ''
if x_axis == 'advanced: ModelMergeBlocks':
models = X.get('models')
vae_use = X.get('vae_use')
if models is None:
raise Exception('models is not found')
new_pipe['loader_settings'] = {**pipe['loader_settings'], 'models': models, 'vae_use': vae_use}
if y_axis == 'advanced: ModelMergeBlocks':
models = Y.get('models')
vae_use = Y.get('vae_use')
if models is None:
raise Exception('models is not found')
new_pipe['loader_settings'] = {**pipe['loader_settings'], 'models': models, 'vae_use': vae_use}
if x_axis in ['advanced: Lora', 'advanced: Checkpoint']:
lora_stack = X.get('lora_stack')
_lora_stack = []
if lora_stack is not None:
for lora in lora_stack:
_lora_stack.append({'lora_name': lora[0], 'model': pipe['model'], 'clip': pipe['clip'], 'model_strength': lora[1], 'clip_strength': lora[2]})
del lora_stack
x_values = '; '.join(x_values)
lora_stack = pipe['lora_stack'] + _lora_stack if 'lora_stack' in pipe else _lora_stack
new_pipe['loader_settings'] = {**pipe['loader_settings'], 'lora_stack': lora_stack}
if y_axis in ['advanced: Lora', 'advanced: Checkpoint']:
lora_stack = Y.get('lora_stack')
_lora_stack = []
if lora_stack is not None:
for lora in lora_stack:
_lora_stack.append({'lora_name': lora[0], 'model': pipe['model'], 'clip': pipe['clip'], 'model_strength': lora[1], 'clip_strength': lora[2]})
del lora_stack
y_values = '; '.join(y_values)
lora_stack = pipe['lora_stack'] + _lora_stack if 'lora_stack' in pipe else _lora_stack
new_pipe['loader_settings'] = {**pipe['loader_settings'], 'lora_stack': lora_stack}
if x_axis == 'advanced: Seeds++ Batch':
if new_pipe['seed']:
value = x_values
x_values = []
for index in range(value):
x_values.append(str(new_pipe['seed'] + index))
x_values = '; '.join(x_values)
if y_axis == 'advanced: Seeds++ Batch':
if new_pipe['seed']:
value = y_values
y_values = []
for index in range(value):
y_values.append(str(new_pipe['seed'] + index))
y_values = '; '.join(y_values)
if x_axis == 'advanced: Positive Prompt S/R':
if positive:
x_value = x_values
x_values = []
for (index, value) in enumerate(x_value):
(search_txt, replace_txt, replace_all) = value
if replace_all:
txt = replace_txt if replace_txt is not None else positive
x_values.append(txt)
else:
txt = positive.replace(search_txt, replace_txt, 1) if replace_txt is not None else positive
x_values.append(txt)
x_values = '; '.join(x_values)
if y_axis == 'advanced: Positive Prompt S/R':
if positive:
y_value = y_values
y_values = []
for (index, value) in enumerate(y_value):
(search_txt, replace_txt, replace_all) = value
if replace_all:
txt = replace_txt if replace_txt is not None else positive
y_values.append(txt)
else:
txt = positive.replace(search_txt, replace_txt, 1) if replace_txt is not None else positive
y_values.append(txt)
y_values = '; '.join(y_values)
if x_axis == 'advanced: Negative Prompt S/R':
if negative:
x_value = x_values
x_values = []
for (index, value) in enumerate(x_value):
(search_txt, replace_txt, replace_all) = value
if replace_all:
txt = replace_txt if replace_txt is not None else negative
x_values.append(txt)
else:
txt = negative.replace(search_txt, replace_txt, 1) if replace_txt is not None else negative
x_values.append(txt)
x_values = '; '.join(x_values)
if y_axis == 'advanced: Negative Prompt S/R':
if negative:
y_value = y_values
y_values = []
for (index, value) in enumerate(y_value):
(search_txt, replace_txt, replace_all) = value
if replace_all:
txt = replace_txt if replace_txt is not None else negative
y_values.append(txt)
else:
txt = negative.replace(search_txt, replace_txt, 1) if replace_txt is not None else negative
y_values.append(txt)
y_values = '; '.join(y_values)
if 'advanced: ControlNet' in x_axis:
x_value = x_values
x_values = []
cnet = []
for (index, value) in enumerate(x_value):
cnet.append(value)
x_values.append(str(index))
x_values = '; '.join(x_values)
new_pipe['loader_settings'] = {**pipe['loader_settings'], 'cnet_stack': cnet}
if 'advanced: ControlNet' in y_axis:
y_value = y_values
y_values = []
cnet = []
for (index, value) in enumerate(y_value):
cnet.append(value)
y_values.append(str(index))
y_values = '; '.join(y_values)
new_pipe['loader_settings'] = {**pipe['loader_settings'], 'cnet_stack': cnet}
if 'advanced: Pos Condition' in x_axis:
x_values = '; '.join(x_values)
cond = X.get('cond')
new_pipe['loader_settings'] = {**pipe['loader_settings'], 'positive_cond_stack': cond}
if 'advanced: Pos Condition' in y_axis:
y_values = '; '.join(y_values)
cond = Y.get('cond')
new_pipe['loader_settings'] = {**pipe['loader_settings'], 'positive_cond_stack': cond}
if 'advanced: Neg Condition' in x_axis:
x_values = '; '.join(x_values)
cond = X.get('cond')
new_pipe['loader_settings'] = {**pipe['loader_settings'], 'negative_cond_stack': cond}
if 'advanced: Neg Condition' in y_axis:
y_values = '; '.join(y_values)
cond = Y.get('cond')
new_pipe['loader_settings'] = {**pipe['loader_settings'], 'negative_cond_stack': cond}
del pipe
return pipeXYPlot().plot(grid_spacing, output_individuals, flip_xy, x_axis, x_values, y_axis, y_values, new_pipe)
```