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

3.6 KiB

Documentation

该节点使用预训练的扩散模型执行图像生成,结合文本提示引导创作过程,并生成高分辨率输出。

Input types

Required

  • ckpt_name
    • 检查点名称对于选择用于图像生成的预训练模型至关重要。它指导节点访问指定的模型架构和权重。
    • Comfy dtype: STRING
    • Python dtype: str
  • positive
    • 正面提示作为指导文本,增强生成图像中期望的特征,将输出引向特定的视觉元素。
    • Comfy dtype: STRING
    • Python dtype: str
  • negative
    • 负面提示有助于从生成的图像中排除不需要的元素,使输出更加符合预期的创作愿景。
    • Comfy dtype: STRING
    • Python dtype: str
  • width
    • 宽度决定了生成图像的水平分辨率,影响输出的整体细节和质量。
    • Comfy dtype: INT
    • Python dtype: int
  • height
    • 高度决定了生成图像的垂直分辨率,影响最终产品的规模和宽高比。
    • Comfy dtype: INT
    • Python dtype: int
  • inference_steps
    • 推理步骤定义了模型执行以完善图像的迭代次数,直接影响最终结果的细节和清晰度水平。
    • Comfy dtype: INT
    • Python dtype: int
  • cfg
    • 配置参数(或cfg)调整模型的指导比例,控制文本提示对图像生成的影响强度。
    • Comfy dtype: FLOAT
    • Python dtype: float
  • seed
    • 种子为随机数生成提供值,确保在不同运行中使用相同的种子时结果的可复现性。
    • Comfy dtype: INT
    • Python dtype: int

Output types

  • IMAGE
    • 输出是一张高分辨率的图像,包含了文本提示所提供的创作方向,代表了扩散模型生成能力的顶峰。
    • Comfy dtype: IMAGE
    • Python dtype: PIL.Image

Usage tips

  • Infra type: GPU

Source code

class Demofusion:

    def __init__(self):
        pass

    @classmethod
    def INPUT_TYPES(s):
        return {'required': {'ckpt_name': ('STRING', {'multiline': False, 'default': 'stabilityai/stable-diffusion-xl-base-1.0'}), 'positive': ('STRING', {'multiline': True, 'default': ''}), 'negative': ('STRING', {'multiline': True, 'default': ''}), 'width': ('INT', {'default': 2048, 'min': 2048, 'max': 4096, 'step': 64, 'display': 'number'}), 'height': ('INT', {'default': 2048, 'min': 2048, 'max': 4096, 'step': 64, 'display': 'number'}), 'inference_steps': ('INT', {'default': 40, 'min': 1, 'max': 100, 'step': 1, 'display': 'number'}), 'cfg': ('FLOAT', {'default': 7.5, 'min': 1.0, 'max': 20.0, 'step': 0.5, 'round': 0.001, 'display': 'number'}), 'seed': ('INT', {'default': 522, 'display': 'number'})}}
    RETURN_TYPES = ('IMAGE',)
    FUNCTION = 'execute'
    CATEGORY = 'tests'

    def execute(self, ckpt_name, positive, negative, width, height, inference_steps, cfg, seed):
        pipe = DemoFusionSDXLStableDiffusionPipeline.from_pretrained(ckpt_name, torch_dtype=torch.float16)
        pipe = pipe.to('cuda')
        generator = torch.Generator(device='cuda')
        generator = generator.manual_seed(seed)
        images = pipe(str(positive), negative_prompt=str(negative), height=height, width=width, view_batch_size=4, stride=64, num_inference_steps=inference_steps, guidance_scale=cfg, cosine_scale_1=3, cosine_scale_2=1, cosine_scale_3=1, sigma=0.8, multi_decoder=True, show_image=False)
        image = images[len(images) - 1]
        image = image.convert('RGB')
        image = np.array(image).astype(np.float32) / 255.0
        image = torch.from_numpy(image)[None,]
        return (image,)