Files
CavinHuang-comfyui-nodes-docs/docs/SamplerCustom.md
2024-05-15 08:09:49 +08:00

4.2 KiB

Documentation

SamplerCustom节点旨在促进生成模型中的采样过程。它整合了诸如噪声添加、模型处理和潜在图像操作等多种组件,以产生高质量的输出。该节点旨在提供一种可定制和高效的采样方法,允许对生成过程进行微调和控制。

Input types

Required

  • model
    • 模型参数对节点至关重要,因为它定义了用于采样的生成模型。它直接影响生成输出的质量和类型。
    • Comfy dtype: MODEL
    • Python dtype: torch.nn.Module
  • positive
    • positive参数提供正向条件信息,引导采样过程朝着期望的结果发展。
    • Comfy dtype: CONDITIONING
    • Python dtype: torch.Tensor
  • negative
    • negative参数提供负向条件信息,以避免在生成的样本中出现不希望的特征。
    • Comfy dtype: CONDITIONING
    • Python dtype: torch.Tensor
  • sampler
    • sampler参数指定要使用的采样方法,这可以显著影响采样过程的效率和效果。
    • Comfy dtype: SAMPLER
    • Python dtype: str
  • sigmas
    • sigmas参数定义了采样过程中每个步骤要使用的噪声水平,影响噪声减少和图像清晰度。
    • Comfy dtype: SIGMAS
    • Python dtype: List[float]
  • latent_image
    • latent_image参数是必不可少的,因为它代表了采样过程开始的输入潜在空间。
    • Comfy dtype: LATENT
    • Python dtype: Dict[str, torch.Tensor]

Optional

  • add_noise
    • add_noise参数决定在采样期间是否应将噪声添加到潜在图像中。这会影响生成样本的多样性和随机性。
    • Comfy dtype: BOOLEAN
    • Python dtype: bool
  • noise_seed
    • noise_seed参数用于初始化噪声生成过程,确保采样结果的可复现性。
    • Comfy dtype: INT
    • Python dtype: int
  • cfg
    • cfg参数调整采样过程的配置,允许用户控制生成图像的保真度和细节水平。
    • Comfy dtype: FLOAT
    • Python dtype: float

Output types

  • output
    • output参数代表采样过程的主要结果,包含生成的潜在样本。
    • Comfy dtype: LATENT
    • Python dtype: Dict[str, torch.Tensor]
  • denoised_output
    • denoised_output参数提供生成样本的去噪版本,可能会提供更清晰、更精细的结果。
    • Comfy dtype: LATENT
    • Python dtype: Dict[str, torch.Tensor]

Usage tips

  • Infra type: GPU

Source code

class SamplerCustom:

    @classmethod
    def INPUT_TYPES(s):
        return {'required': {'model': ('MODEL',), 'add_noise': ('BOOLEAN', {'default': True}), 'noise_seed': ('INT', {'default': 0, 'min': 0, 'max': 18446744073709551615}), 'cfg': ('FLOAT', {'default': 8.0, 'min': 0.0, 'max': 100.0, 'step': 0.1, 'round': 0.01}), 'positive': ('CONDITIONING',), 'negative': ('CONDITIONING',), 'sampler': ('SAMPLER',), 'sigmas': ('SIGMAS',), 'latent_image': ('LATENT',)}}
    RETURN_TYPES = ('LATENT', 'LATENT')
    RETURN_NAMES = ('output', 'denoised_output')
    FUNCTION = 'sample'
    CATEGORY = 'sampling/custom_sampling'

    def sample(self, model, add_noise, noise_seed, cfg, positive, negative, sampler, sigmas, latent_image):
        latent = latent_image
        latent_image = latent['samples']
        if not add_noise:
            noise = Noise_EmptyNoise().generate_noise(latent)
        else:
            noise = Noise_RandomNoise(noise_seed).generate_noise(latent)
        noise_mask = None
        if 'noise_mask' in latent:
            noise_mask = latent['noise_mask']
        x0_output = {}
        callback = latent_preview.prepare_callback(model, sigmas.shape[-1] - 1, x0_output)
        disable_pbar = not comfy.utils.PROGRESS_BAR_ENABLED
        samples = comfy.sample.sample_custom(model, noise, cfg, sampler, sigmas, positive, negative, latent_image, noise_mask=noise_mask, callback=callback, disable_pbar=disable_pbar, seed=noise_seed)
        out = latent.copy()
        out['samples'] = samples
        if 'x0' in x0_output:
            out_denoised = latent.copy()
            out_denoised['samples'] = model.model.process_latent_out(x0_output['x0'].cpu())
        else:
            out_denoised = out
        return (out, out_denoised)