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

6.3 KiB

Documentation

zero123Loader节点作为一个接口,用于加载和管理各种模型和图像,便于初始化复杂的图像处理和生成任务的流程。它通过处理VAE和CLIP模型等必要组件的检索和配置,简化了后续操作,确保操作能够高效有效地执行。

Input types

Required

  • ckpt_name
    • ckpt_name参数用于指定要加载的包含训练模型参数的检查点。这对于节点正确运行和启动后续的图像处理及生成任务至关重要。
    • Comfy dtype: COMBO['stable_zero123.ckpt']
    • Python dtype: str
  • vae_name
    • vae_name参数用于选择适当的VAE模型,该模型用于生成和处理图像的潜在表示。VAE模型的选择对节点生成的图像质量和特性有着显著影响。
    • Comfy dtype: COMBO[['Baked VAE'] + folder_paths.get_filename_list('vae')]
    • Python dtype: str
  • init_image
    • init_image参数至关重要,因为它提供了作为图像处理和生成任务起点的初始图像数据。这张图像的内容和质量直接影响输出结果。
    • Comfy dtype: IMAGE
    • Python dtype: PIL.Image.Image
  • empty_latent_width
    • empty_latent_width参数定义了将要填充生成内容的空潜在空间的宽度。它是决定生成图像的分辨率和规模的关键因素。
    • Comfy dtype: INT
    • Python dtype: int
  • empty_latent_height
    • empty_latent_height参数设置了空潜在空间的高度,对应于生成图像的垂直维度。这个参数对于控制输出图像的长宽比和大小非常重要。
    • Comfy dtype: INT
    • Python dtype: int
  • batch_size

    • Comfy dtype: INT
    • Python dtype: int
  • elevation
    • elevation参数指定了图像的观察视角的垂直角度,影响渲染输出的透视和外观。它是创建逼真且视觉上吸引人的图像的重要因素。
    • Comfy dtype: FLOAT
    • Python dtype: float
  • azimuth
    • azimuth参数决定了图像观察的水平角度,影响生成图像的方向和布局。它对于将输出与期望的视觉方向对齐至关重要。
    • Comfy dtype: FLOAT
    • Python dtype: float

Optional

  • prompt
    • prompt参数为图像生成过程提供文本指导,帮助塑造生成图像的内容和风格。这是一个可选但有用的工具,用于引导节点输出的创作方向。
    • Comfy dtype: PROMPT
    • Python dtype: str
  • my_unique_id
    • my_unique_id参数用于跟踪和管理节点操作的唯一实例,确保每次执行都是可识别和独特的。这有助于调试和维护流程的完整性。
    • Comfy dtype: UNIQUE_ID
    • Python dtype: str

Output types

  • pipe
    • pipe输出是一个综合性结构,封装了图像处理和生成流程所需的所有组件和设置。它作为后续操作的支柱,确保工作流程的顺畅和协调。
    • Comfy dtype: PIPE_LINE
    • Python dtype: dict
  • model
    • model输出提供了已加载和配置的模型,准备用于图像处理任务。它是直接影响图像生成质量和准确性的关键组件。
    • Comfy dtype: MODEL
    • Python dtype: comfy.model_management.ModelPatcher
  • vae
    • vae输出包含了已经初始化并准备好用于生成和处理潜在图像表示的VAE模型。它在图像创建过程中起着核心作用,使节点能够产生高质量的视觉效果。
    • Comfy dtype: VAE
    • Python dtype: comfy.sd.VAE

Usage tips

  • Infra type: CPU

Source code

class zero123Loader:

    @classmethod
    def INPUT_TYPES(cls):

        def get_file_list(filenames):
            return [file for file in filenames if file != 'put_models_here.txt' and 'zero123' in file.lower()]
        return {'required': {'ckpt_name': (list(['stable_zero123.ckpt']),), 'vae_name': (['Baked VAE'] + folder_paths.get_filename_list('vae'),), 'init_image': ('IMAGE',), 'empty_latent_width': ('INT', {'default': 256, 'min': 16, 'max': MAX_RESOLUTION, 'step': 8}), 'empty_latent_height': ('INT', {'default': 256, 'min': 16, 'max': MAX_RESOLUTION, 'step': 8}), 'batch_size': ('INT', {'default': 1, 'min': 1, 'max': 64}), 'elevation': ('FLOAT', {'default': 0.0, 'min': -180.0, 'max': 180.0}), 'azimuth': ('FLOAT', {'default': 0.0, 'min': -180.0, 'max': 180.0})}, 'hidden': {'prompt': 'PROMPT', 'my_unique_id': 'UNIQUE_ID'}}
    RETURN_TYPES = ('PIPE_LINE', 'MODEL', 'VAE')
    RETURN_NAMES = ('pipe', 'model', 'vae')
    FUNCTION = 'adv_pipeloader'
    CATEGORY = 'EasyUse/Loaders'

    def adv_pipeloader(self, ckpt_name, vae_name, init_image, empty_latent_width, empty_latent_height, batch_size, elevation, azimuth, prompt=None, my_unique_id=None):
        model: ModelPatcher | None = None
        vae: VAE | None = None
        clip: CLIP | None = None
        clip_vision = None
        easyCache.update_loaded_objects(prompt)
        (model, clip, vae, clip_vision) = easyCache.load_checkpoint(ckpt_name, 'Default', True)
        output = clip_vision.encode_image(init_image)
        pooled = output.image_embeds.unsqueeze(0)
        pixels = comfy.utils.common_upscale(init_image.movedim(-1, 1), empty_latent_width, empty_latent_height, 'bilinear', 'center').movedim(1, -1)
        encode_pixels = pixels[:, :, :, :3]
        t = vae.encode(encode_pixels)
        cam_embeds = camera_embeddings(elevation, azimuth)
        cond = torch.cat([pooled, cam_embeds.repeat((pooled.shape[0], 1, 1))], dim=-1)
        positive = [[cond, {'concat_latent_image': t}]]
        negative = [[torch.zeros_like(pooled), {'concat_latent_image': torch.zeros_like(t)}]]
        latent = torch.zeros([batch_size, 4, empty_latent_height // 8, empty_latent_width // 8])
        samples = {'samples': latent}
        image = easySampler.pil2tensor(Image.new('RGB', (1, 1), (0, 0, 0)))
        pipe = {'model': model, 'positive': positive, 'negative': negative, 'vae': vae, 'clip': clip, 'samples': samples, 'images': image, 'seed': 0, 'loader_settings': {'ckpt_name': ckpt_name, 'vae_name': vae_name, 'positive': positive, 'positive_l': None, 'positive_g': None, 'positive_balance': None, 'negative': negative, 'negative_l': None, 'negative_g': None, 'negative_balance': None, 'empty_latent_width': empty_latent_width, 'empty_latent_height': empty_latent_height, 'batch_size': batch_size, 'seed': 0, 'empty_samples': samples}}
        return (pipe, model, vae)