4.1 KiB
4.1 KiB
Documentation
- Class name: PreviewLatentAdvanced
- Category: latent
- Output node: True
PreviewLatentAdvanced节点是一个设计用于高级潜在图像预览生成的功能模块。它允许用户自定义基础模型、预览方法,并包含额外的元数据。该节点作为生成潜在图像预览的基础组件,提供了更高的灵活性和对预览生成过程的精细控制。
Input types
Required
- latent
- 这是需要预览的图像的潜在表示。它是生成图像预览的关键组成部分。
- Comfy dtype: LATENT
- Python dtype: Dict[str, torch.Tensor]
- base_model
- 指定用于预览生成的基础模型,提供'SD15'和'SDXL'两种选项,以调整预览质量和特征。
- Comfy dtype: COMBO[STRING]
- Python dtype: str
- preview_method
- 决定将潜在表示转换为图像预览的方法,选项包括'auto'、'taesd'和'latent2rgb',可以生成不同风格的预览。
- Comfy dtype: COMBO[STRING]
- Python dtype: str
Output types
- latent
- 返回图像的潜在表示,保持与输入的一致性,同时可能包含预览过程中的潜在修改。
- Comfy dtype: LATENT
- Python dtype: Dict[str, torch.Tensor]
Usage tips
- Infra type:
GPU - Common nodes: unknown
Source code
class PreviewLatentAdvanced:
@classmethod
def INPUT_TYPES(cls):
return {"required":
{"latent": ("LATENT",),
"base_model": (["SD15","SDXL"],),
"preview_method": (["auto","taesd","latent2rgb"],),
},
"hidden": {"prompt": "PROMPT",
"extra_pnginfo": "EXTRA_PNGINFO",
"my_unique_id": "UNIQUE_ID",},
}
RETURN_TYPES = ("LATENT",)
RETURN_NAMES = ("latent",)
OUTPUT_NODE = True
FUNCTION = "lpreview"
CATEGORY = "latent"
def lpreview(self, latent, base_model, preview_method, prompt=None, extra_pnginfo=None, my_unique_id=None):
previous_preview_method = args.preview_method
if preview_method == "taesd":
temp_previewer = latent_preview.LatentPreviewMethod.TAESD
elif preview_method == "latent2rgb":
temp_previewer = latent_preview.LatentPreviewMethod.Latent2RGB
else:
temp_previewer = latent_preview.LatentPreviewMethod.Auto
results = list()
try:
args.preview_method=temp_previewer
preview_format = "PNG"
load_device=comfy.model_management.vae_offload_device()
latent_format = {"SD15":latent_formats.SD15,
"SDXL":latent_formats.SDXL}[base_model]()
result=[]
for i in range(len(latent["samples"])):
x=latent.copy()
x["samples"] = latent["samples"][i:i+1].clone()
x_sample = x["samples"]
x_sample = x_sample / {"SD15":6,"SDXL":7.5}[base_model]
img = latent_preview.get_previewer(load_device, latent_format).decode_latent_to_preview(x_sample)
full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path("",folder_paths.get_temp_directory(), img.height, img.width)
metadata = None
if not args.disable_metadata:
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 = "latent_"+"".join(random.choice("0123456789") for x in range(8))+".png"
img.save(os.path.join(full_output_folder, file), pnginfo=metadata, compress_level=4)
results.append({"filename": file, "subfolder": subfolder, "type": "temp"})
finally:
# Restore global changes
args.preview_method=previous_preview_method
return {"result": (latent,), "ui": { "images": results } }