Files
CavinHuang-comfyui-nodes-docs/docs/FL_ImageCaptionSaver.md
2024-07-04 08:39:03 +08:00

3.3 KiB

Documentation

FL_ImageCaptionSaver节点旨在将一批图像及其相应的说明文字保存到指定目录中,并提供文件命名和覆盖控制选项。它有助于组织和存储生成的图像及其文本描述,从而提高视觉内容的可访问性和管理效率。

Input types

Required

  • images
    • 需要保存的一批图像。这个输入对于确定将要存储的内容至关重要,直接影响创建的输出文件。
    • Comfy dtype: IMAGE
    • Python dtype: List[torch.Tensor]
  • folder_name
    • 用于保存图像和说明文字的文件夹名称。它作为输出的目标路径,影响已保存文件的组织方式。
    • Comfy dtype: STRING
    • Python dtype: str
  • caption_text
    • 要与每张图像一起保存的文本说明。这个输入为图像提供上下文或描述性信息,丰富了内容的价值。
    • Comfy dtype: STRING
    • Python dtype: str
  • overwrite
    • 一个布尔标志,指示是否应覆盖同名的现有文件。这影响节点如何处理文件命名冲突和存储管理。
    • Comfy dtype: BOOLEAN
    • Python dtype: bool

Output types

  • string
    • 一条确认消息,详细说明保存的图像和说明文字的数量以及存储它们的目录。它提供了操作成功的反馈。
    • Comfy dtype: STRING
    • Python dtype: str

Usage tips

  • Infra type: CPU
  • Common nodes: unknown

Source code

class FL_ImageCaptionSaver:
    @classmethod
    def INPUT_TYPES(cls):
        return {
            "required": {
                "images": ("IMAGE", {}),
                "folder_name": ("STRING", {"default": "output_folder"}),
                "caption_text": ("STRING", {"default": "Your caption here"}),
                "overwrite": ("BOOLEAN", {"default": True})  # New overwrite toggle
            }
        }

    RETURN_TYPES = ("STRING",)
    FUNCTION = "save_images_with_captions"
    CATEGORY = "🏵️Fill Nodes"

    def save_images_with_captions(self, images, folder_name, caption_text, overwrite):
        # Ensure output directory exists
        os.makedirs(folder_name, exist_ok=True)

        saved_files = []
        for i, image_tensor in enumerate(images):
            base_name = f"image_{i}"
            image_file_name = f"{folder_name}/{base_name}.png"
            text_file_name = f"{folder_name}/{base_name}.txt"

            # Check if overwrite is disabled and file exists
            if not overwrite:
                counter = 1
                while os.path.exists(image_file_name) or os.path.exists(text_file_name):
                    image_file_name = f"{folder_name}/{base_name}_{counter}.png"
                    text_file_name = f"{folder_name}/{base_name}_{counter}.txt"
                    counter += 1

            # Convert tensor to image
            image = Image.fromarray((image_tensor.numpy() * 255).astype('uint8'), 'RGB')

            # Save image
            image.save(image_file_name)
            saved_files.append(image_file_name)

            # Save text file
            with open(text_file_name, "w") as text_file:
                text_file.write(caption_text)

        return (f"Saved {len(images)} images and captions in '{folder_name}'",)