ComfyUI自定义图片导出路径

代码:direct_save_image.py
将direct_save_image.py放到custom_node文件夹下。

import os
import torch
import numpy as np
from PIL import Image
import folder_paths
import json
from PIL.PngImagePlugin import PngInfo
import time

class DirectSaveImage:
    def __init__(self):
        self.output_dir = folder_paths.get_output_directory()
        self.type = "output"
        self.prefix_append = ""
        self.compress_level = 4

    @classmethod
    def INPUT_TYPES(s):
        return {
            "required": {
                "images": ("IMAGE", {"tooltip": "The images to save."}),
                "filename_prefix": ("STRING", {"default": "ComfyUI", "tooltip": "The prefix for the file to save."}),
                "output_path": ("STRING", {
                    "default": "", 
                    "multiline": False,
                    "tooltip": "Custom output directory path. Examples:\nD:/MyImages\nE:/AI_Output\nC:/Users/YourName/Documents/ComfyUI_Results\n\nLeave empty to use default ComfyUI output folder."
                }),
                "use_custom_path": ("BOOLEAN", {"default": False, "tooltip": "Enable custom output path"})
            },
            "hidden": {
                "prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"
            },
        }

    RETURN_TYPES = ()
    FUNCTION = "save_images"
    OUTPUT_NODE = True
    CATEGORY = "image"
    DESCRIPTION = "Direct Save Image with custom path support"

    def save_images(self, images, filename_prefix="ComfyUI", output_path="", use_custom_path=False, prompt=None, extra_pnginfo=None):
        # 决定保存目录
        if use_custom_path and output_path and output_path.strip():
            # 使用自定义路径
            output_path = output_path.strip().replace('\\', '/').rstrip('/')
            try:
                os.makedirs(output_path, exist_ok=True)
                save_dir = output_path
            except Exception as e:
                print(f"Warning: Could not create directory {output_path}, using default: {e}")
                save_dir = self.output_dir
        else:
            # 使用默认路径
            save_dir = self.output_dir

        filename_prefix += self.prefix_append
        
        # 生成文件名
        timestamp = int(time.time())
        counter = 0
        
        results = list()
        
        for (batch_number, image) in enumerate(images):
            i = 255. * image.cpu().numpy()
            img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8))

            # 准备元数据
            metadata = PngInfo()
            if prompt is not None:
                metadata.add_text("prompt", json.dumps(prompt))
            if extra_pnginfo is not None:
                for x in extra_pnginfo:
                    metadata.add_text(x, json.dumps(extra_pnginfo[x]))

            # 生成文件名
            file = f"{filename_prefix}_{timestamp}_{counter:05}_.png"
            file_path = os.path.join(save_dir, file)
            
            # 直接保存到目标位置
            try:
                img.save(file_path, compress_level=self.compress_level, pnginfo=metadata)
                print(f"Saved image to: {file_path}")
                
                results.append({
                    "filename": file,
                    "subfolder": "",
                    "type": self.type
                })
            except Exception as e:
                print(f"Error saving image to {file_path}: {e}")
                
            counter += 1

        return { "ui": { "images": results } }

# 注册节点
NODE_CLASS_MAPPINGS = {
    "DirectSaveImage": DirectSaveImage
}

NODE_DISPLAY_NAME_MAPPINGS = {
    "DirectSaveImage": "Save Image (Direct)"
} 

使用方法:

在comfyui界面中搜索Save Image(Direct)节点
use_custom_path为true时,使用自定义导出路径

use_custom_path为false时,使用默认导出路径

sou

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值