4.2 KiB
4.2 KiB
Documentation
- Class name: SamplerCustom
- Category: sampling/custom_sampling
- Output node: False
- Repo Ref: https://github.com/comfyanonymous/ComfyUI
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)