conditioning
latent
samling
API Node
- Image
- BFL
- Luma
- Recraft
- Save SVG
- Recraft Style - Realistic Image
- Recraft Text to Vector
- Recraft Creative Upscale
- Recraft Image to Image
- Recraft Crisp Upscale
- Recraft Color RGB
- Recraft Text to Image
- Recraft Image Inpainting
- Recraft Vectorize Image
- Recraft Style - Digital Illustration
- Recraft Remove Background
- Recraft Style - Logo Raster
- Recraft Controls
- Recraft Replace Background
- Ideogram
- Stability AI
- OpenAI
- Video
Save SVG - ComfyUI 原生节点文档
将SVG矢量图形保存到文件的实用节点
Save SVG 节点允许你将从Recraft矢量生成节点获取的SVG数据保存为文件系统中的可用文件。这是处理和导出矢量图形的必要组件。
节点功能
此节点接收SVG矢量数据,并将其保存为文件系统中的标准SVG文件。它支持自动文件命名和保存路径指定,使得矢量图形可以被其他软件打开和编辑。
参数说明
基本参数
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
svg | SVG | - | 要保存的 SVG 矢量数据 |
filename_prefix | 字符串 | ”recraft” | 文件名前缀 |
output_dir | 字符串 | - | 输出目录,默认为 ComfyUI 输出文件夹具体路径为 ComfyUI/output/svg/ |
index | 整数 | -1 | 保存索引,-1 表示所有生成的 SVG |
输出
输出 | 类型 | 说明 |
---|---|---|
SVG | SVG | 传递输入的SVG数据 |
使用示例
Recraft Text to Image 工作流示例
Recraft Text to Image 工作流示例
源码参考
[节点源码 (更新于2025-05-03)]
class SaveSVGNode:
"""
Save SVG files on disk.
"""
def __init__(self):
self.output_dir = folder_paths.get_output_directory()
self.type = "output"
self.prefix_append = ""
RETURN_TYPES = ()
DESCRIPTION = cleandoc(__doc__ or "") # Handle potential None value
FUNCTION = "save_svg"
CATEGORY = "api node/image/Recraft"
OUTPUT_NODE = True
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"svg": (RecraftIO.SVG,),
"filename_prefix": ("STRING", {"default": "svg/ComfyUI", "tooltip": "The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes."})
},
"hidden": {
"prompt": "PROMPT",
"extra_pnginfo": "EXTRA_PNGINFO"
}
}
def save_svg(self, svg: SVG, filename_prefix="svg/ComfyUI", prompt=None, extra_pnginfo=None):
filename_prefix += self.prefix_append
full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(filename_prefix, self.output_dir)
results = list()
# Prepare metadata JSON
metadata_dict = {}
if prompt is not None:
metadata_dict["prompt"] = prompt
if extra_pnginfo is not None:
metadata_dict.update(extra_pnginfo)
# Convert metadata to JSON string
metadata_json = json.dumps(metadata_dict, indent=2) if metadata_dict else None
for batch_number, svg_bytes in enumerate(svg.data):
filename_with_batch_num = filename.replace("%batch_num%", str(batch_number))
file = f"{filename_with_batch_num}_{counter:05}_.svg"
# Read SVG content
svg_bytes.seek(0)
svg_content = svg_bytes.read().decode('utf-8')
# Inject metadata if available
if metadata_json:
# Create metadata element with CDATA section
metadata_element = f""" <metadata>
<![CDATA[
{metadata_json}
]]>
</metadata>
"""
# Insert metadata after opening svg tag using regex
import re
svg_content = re.sub(r'(<svg[^>]*>)', r'\1\n' + metadata_element, svg_content)
# Write the modified SVG to file
with open(os.path.join(full_output_folder, file), 'wb') as svg_file:
svg_file.write(svg_content.encode('utf-8'))
results.append({
"filename": file,
"subfolder": subfolder,
"type": self.type
})
counter += 1
return { "ui": { "images": results } }
助手
Responses are generated using AI and may contain mistakes.