5.4 KiB
5.4 KiB
Documentation
- Class name: SaltScheduledImageAdjust
- Category: SALT/Scheduling/Image
- Output node: False
- Repo Ref: https://github.com/saltruism/salt-nodes
SaltScheduledImageAdjust节点专门用于对一批图像应用计划调整,允许随时间动态改变亮度、对比度、饱和度、锐度、高斯模糊和边缘增强。它能够创建图像属性按预定计划演变的序列,从而增强视觉叙事或数据可视化效果。
Input types
Required
- images
- 要调整的图像集合。这个参数是节点操作的核心,它定义了将要进行计划转换的图像集。
- Comfy dtype: IMAGE
- Python dtype: List[Image]
Optional
- masks
- 可选的蒙版,用于在图像上选择性地应用调整。这允许更精确地控制图像的哪些区域受到调整的影响。
- Comfy dtype: MASK
- Python dtype: List[Image]
- brightness_schedule
- 定义图像亮度如何随时间变化的计划。这通过按预定序列改变图像的亮度来实现动态视觉效果。
- Comfy dtype: LIST
- Python dtype: List[float]
- contrast_schedule
- 规定随时间变化的对比度调整计划,允许增强或减少图像最暗和最亮部分之间的差异。
- Comfy dtype: LIST
- Python dtype: List[float]
- saturation_schedule
- 定义图像颜色强度如何随时间变化,使得能够创建鲜艳或柔和的颜色序列。
- Comfy dtype: LIST
- Python dtype: List[float]
- sharpness_schedule
- 调整图像细节清晰度或模糊度随时间变化的计划,有助于聚焦特定元素或创建梦幻般的序列。
- Comfy dtype: LIST
- Python dtype: List[float]
- gaussian_blur_schedule
- 确定随时间应用于图像的高斯模糊程度,允许创建柔焦效果或过渡。
- Comfy dtype: LIST
- Python dtype: List[float]
- edge_enhance_schedule
- 随时间增强图像内边缘的计划,可用于突出细节或创造更具图形感的外观。
- Comfy dtype: LIST
- Python dtype: List[float]
Output types
- image
- 应用计划调整后的图像,展示随时间的动态变化。
- Comfy dtype: IMAGE
- Python dtype: List[Image]
Usage tips
- Infra type:
CPU - Common nodes: unknown
Source code
class SaltScheduledImageAdjust:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"images": ("IMAGE",),
},
"optional": {
"masks": ("MASK",),
"brightness_schedule": ("LIST", ),
"contrast_schedule": ("LIST", ),
"saturation_schedule": ("LIST", ),
"sharpness_schedule": ("LIST", ),
"gaussian_blur_schedule": ("LIST", ),
"edge_enhance_schedule": ("LIST", ),
}
}
RETURN_TYPES = ("IMAGE",)
FUNCTION = "images_adjust"
CATEGORY = "SALT/Scheduling/Image"
def float_value(self, adj_list, idx):
if isinstance(adj_list, list) and adj_list:
return adj_list[idx] if idx < len(adj_list) else adj_list[-1]
else:
return 1.0
def images_adjust(
self,
images,
masks=[],
brightness_schedule=[1.0],
contrast_schedule=[1.0],
saturation_schedule=[1.0],
sharpness_schedule=[1.0],
gaussian_blur_schedule=[0.0],
edge_enhance_schedule=[0.0]
):
adjusted_images = []
for idx, img in enumerate(images):
original_pil_image = tensor2pil(img.unsqueeze(0))
pil_image = original_pil_image.copy()
if isinstance(masks, torch.Tensor):
pil_mask = mask2pil(masks[idx].unsqueeze(0)) if idx < len(masks) else mask2pil(masks[-1].unsqueeze(0))
pil_mask = pil_mask.resize(original_pil_image.size).convert('L')
else:
pil_mask = None
brightness = self.float_value(brightness_schedule, idx)
contrast = self.float_value(contrast_schedule, idx)
saturation = self.float_value(saturation_schedule, idx)
sharpness = self.float_value(sharpness_schedule, idx)
gaussian_blur = self.float_value(gaussian_blur_schedule, idx)
edge_enhance = self.float_value(edge_enhance_schedule, idx)
if brightness != 1.0:
pil_image = ImageEnhance.Brightness(pil_image).enhance(brightness)
if contrast != 1.0:
pil_image = ImageEnhance.Contrast(pil_image).enhance(contrast)
if saturation != 1.0:
pil_image = ImageEnhance.Color(pil_image).enhance(saturation)
if sharpness != 1.0:
pil_image = ImageEnhance.Sharpness(pil_image).enhance(sharpness)
if gaussian_blur > 0.0:
pil_image = pil_image.filter(ImageFilter.GaussianBlur(radius=gaussian_blur))
if edge_enhance > 0.0:
edge_enhanced_img = pil_image.filter(ImageFilter.EDGE_ENHANCE_MORE)
blend_mask = Image.new("L", pil_image.size, color=int(round(edge_enhance * 255)))
pil_image = Image.composite(edge_enhanced_img, pil_image, blend_mask)
if pil_mask:
pil_image = Image.composite(pil_image, original_pil_image, pil_mask)
adjusted_images.append(pil2tensor(pil_image))
return (torch.cat(adjusted_images, dim=0), )