3.8 KiB
3.8 KiB
Documentation
- Class name: IterativeImageUpscale
- Category: ImpactPack/Upscale
- Output node: False
- Repo Ref: https://github.com/ltdrdata/ComfyUI-Impact-Pack.git
IterativeImageUpscale节点的'doit'方法旨在执行迭代图像放大。它接收一张图像,并通过一系列细化步骤逐步提高其分辨率。该节点利用潜在空间模型对图像进行编码和解码,应用放大因子并在指定的步骤数上迭代,以实现所需的细节水平。
Input types
Required
- pixels
- 'pixels'参数表示需要放大的输入图像。这是一个关键元素,因为整个操作围绕通过迭代处理提高此图像的分辨率展开。
- Comfy dtype: IMAGE
- Python dtype: np.ndarray
- upscale_factor
- 'upscale_factor'参数定义了放大过程中的放大级别。它决定了输入图像在处理后将被放大多少。
- Comfy dtype: FLOAT
- Python dtype: float
- steps
- 'steps'参数表示在放大过程中要执行的迭代步骤数。更多的步骤通常会导致更平滑、更详细的放大图像。
- Comfy dtype: INT
- Python dtype: int
- upscaler
- 'upscaler'参数指的是将应用于增加图像分辨率的放大方法或模型。它是放大过程的重要组成部分。
- Comfy dtype: UPSCALER
- Python dtype: Any
- vae
- 'vae'参数是变分自编码器(VAE)的一个实例,用于在放大过程中对图像数据进行编码和解码。
- Comfy dtype: VAE
- Python dtype: torch.nn.Module
Optional
- temp_prefix
- 'temp_prefix'参数用于指定在放大过程中存储中间结果的临时文件前缀。可以留空以使用默认行为。
- Comfy dtype: STRING
- Python dtype: str
- step_mode
- 'step_mode'参数确定在每个步骤中用于缩放图像的方法。它可以是'simple'用于线性缩放,或者'geometric'用于指数缩放。
- Comfy dtype: COMBO[simple, geometric]
- Python dtype: str
- unique_id
- 'unique_id'参数用于内部跟踪放大操作的进度和状态。它通常对用户隐藏,并自动分配。
- Comfy dtype: UNIQUE_ID
- Python dtype: str
Output types
- image
- 'image'输出参数代表了通过迭代放大过程得到的放大图像。它是节点功能的最终产物。
- Comfy dtype: IMAGE
- Python dtype: np.ndarray
Usage tips
- Infra type: CPU
Source code
class IterativeImageUpscale:
@classmethod
def INPUT_TYPES(s):
return {'required': {'pixels': ('IMAGE',), 'upscale_factor': ('FLOAT', {'default': 1.5, 'min': 1, 'max': 10000, 'step': 0.1}), 'steps': ('INT', {'default': 3, 'min': 1, 'max': 10000, 'step': 1}), 'temp_prefix': ('STRING', {'default': ''}), 'upscaler': ('UPSCALER',), 'vae': ('VAE',), 'step_mode': (['simple', 'geometric'], {'default': 'simple'})}, 'hidden': {'unique_id': 'UNIQUE_ID'}}
RETURN_TYPES = ('IMAGE',)
RETURN_NAMES = ('image',)
FUNCTION = 'doit'
CATEGORY = 'ImpactPack/Upscale'
def doit(self, pixels, upscale_factor, steps, temp_prefix, upscaler, vae, step_mode='simple', unique_id=None):
if temp_prefix == '':
temp_prefix = None
core.update_node_status(unique_id, 'VAEEncode (first)', 0)
if upscaler.is_tiled:
latent = nodes.VAEEncodeTiled().encode(vae, pixels, upscaler.tile_size)[0]
else:
latent = nodes.VAEEncode().encode(vae, pixels)[0]
refined_latent = IterativeLatentUpscale().doit(latent, upscale_factor, steps, temp_prefix, upscaler, step_mode, unique_id)
core.update_node_status(unique_id, 'VAEDecode (final)', 1.0)
if upscaler.is_tiled:
pixels = nodes.VAEDecodeTiled().decode(vae, refined_latent[0], upscaler.tile_size)[0]
else:
pixels = nodes.VAEDecode().decode(vae, refined_latent[0])[0]
core.update_node_status(unique_id, '', None)
return (pixels,)