85 lines
3.3 KiB
Markdown
85 lines
3.3 KiB
Markdown
# Documentation
|
|
- Class name: VAELoader
|
|
- Category: loaders
|
|
- Output node: False
|
|
- Repo Ref: https://github.com/comfyanonymous/ComfyUI
|
|
|
|
VAELoader节点旨在管理变分自编码器(VAE)模型的加载和准备。它抽象了处理不同VAE配置的复杂性,并为访问这些模型提供了统一的接口。节点的功能集中在列出可用的VAE、根据它们的名称加载它们,并确保它们被正确初始化并准备好用于下游任务。
|
|
|
|
# Input types
|
|
## Required
|
|
- vae_name
|
|
- 参数'vae_name'对于识别要加载的特定VAE模型至关重要。它通过确定将使用哪个模型配置和权重来影响节点的执行。此参数对于确保为后续处理步骤准备正确的模型至关重要。
|
|
- Comfy dtype: str
|
|
- Python dtype: str
|
|
|
|
# Output types
|
|
- VAE
|
|
- 输出参数'VAE'代表已加载的变分自编码器模型。它非常重要,因为它是节点的主要输出,封装了模型的配置和学习到的参数。此输出允许在进一步的分析或生成任务中使用模型。
|
|
- Comfy dtype: VAE
|
|
- Python dtype: comfy.sd.VAE
|
|
|
|
# Usage tips
|
|
- Infra type: CPU
|
|
|
|
# Source code
|
|
```
|
|
class VAELoader:
|
|
|
|
@staticmethod
|
|
def vae_list():
|
|
vaes = folder_paths.get_filename_list('vae')
|
|
approx_vaes = folder_paths.get_filename_list('vae_approx')
|
|
sdxl_taesd_enc = False
|
|
sdxl_taesd_dec = False
|
|
sd1_taesd_enc = False
|
|
sd1_taesd_dec = False
|
|
for v in approx_vaes:
|
|
if v.startswith('taesd_decoder.'):
|
|
sd1_taesd_dec = True
|
|
elif v.startswith('taesd_encoder.'):
|
|
sd1_taesd_enc = True
|
|
elif v.startswith('taesdxl_decoder.'):
|
|
sdxl_taesd_dec = True
|
|
elif v.startswith('taesdxl_encoder.'):
|
|
sdxl_taesd_enc = True
|
|
if sd1_taesd_dec and sd1_taesd_enc:
|
|
vaes.append('taesd')
|
|
if sdxl_taesd_dec and sdxl_taesd_enc:
|
|
vaes.append('taesdxl')
|
|
return vaes
|
|
|
|
@staticmethod
|
|
def load_taesd(name):
|
|
sd = {}
|
|
approx_vaes = folder_paths.get_filename_list('vae_approx')
|
|
encoder = next(filter(lambda a: a.startswith('{}_encoder.'.format(name)), approx_vaes))
|
|
decoder = next(filter(lambda a: a.startswith('{}_decoder.'.format(name)), approx_vaes))
|
|
enc = comfy.utils.load_torch_file(folder_paths.get_full_path('vae_approx', encoder))
|
|
for k in enc:
|
|
sd['taesd_encoder.{}'.format(k)] = enc[k]
|
|
dec = comfy.utils.load_torch_file(folder_paths.get_full_path('vae_approx', decoder))
|
|
for k in dec:
|
|
sd['taesd_decoder.{}'.format(k)] = dec[k]
|
|
if name == 'taesd':
|
|
sd['vae_scale'] = torch.tensor(0.18215)
|
|
elif name == 'taesdxl':
|
|
sd['vae_scale'] = torch.tensor(0.13025)
|
|
return sd
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(s):
|
|
return {'required': {'vae_name': (s.vae_list(),)}}
|
|
RETURN_TYPES = ('VAE',)
|
|
FUNCTION = 'load_vae'
|
|
CATEGORY = 'loaders'
|
|
|
|
def load_vae(self, vae_name):
|
|
if vae_name in ['taesd', 'taesdxl']:
|
|
sd = self.load_taesd(vae_name)
|
|
else:
|
|
vae_path = folder_paths.get_full_path('vae', vae_name)
|
|
sd = comfy.utils.load_torch_file(vae_path)
|
|
vae = comfy.sd.VAE(sd=sd)
|
|
return (vae,)
|
|
``` |