From 23e2e4898de4dffe9f5ca62850404ddd92ddbba3 Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 31 Mar 2025 16:48:58 +0800 Subject: [PATCH] Initial commit: Tile Image node for ComfyUI --- .gitignore | 31 +++++++++++++++++++++++++++++++ README.md | 28 ++++++++++++++++++++++++++++ __init__.py | 9 +++++++++ tile_image.py | 40 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 108 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 __init__.py create mode 100644 tile_image.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..56018cc --- /dev/null +++ b/.gitignore @@ -0,0 +1,31 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# IDE +.idea/ +.vscode/ +*.swp +*.swo + +# OS +.DS_Store +Thumbs.db \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..24ba478 --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +# Tile Image Node for ComfyUI + +一个简单的ComfyUI自定义节点,用于将图像水平平铺多次。 + +## 功能 + +- 将输入图像水平平铺指定次数 +- 可以控制图像之间的间距 +- 保持原始图像的高度不变 +- 输出带有完整mask的图像 + +## 安装 + +```bash +cd custom_nodes +git clone https://github.com/yourusername/ComfyUI-TileImage TileImage +``` + +## 使用方法 + +节点会在ComfyUI的"image/processing"类别下出现,名称为"Tile Image"。 + +### 参数 + +- `image`: 输入图像 +- `mask`: 输入mask +- `num_tiles`: 要平铺的图像数量 +- `spacing`: 图像之间的间距(像素) \ No newline at end of file diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..f597b05 --- /dev/null +++ b/__init__.py @@ -0,0 +1,9 @@ +from .tile_image import TileImage + +NODE_CLASS_MAPPINGS = { + "TileImage": TileImage +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "TileImage": "Tile Image" +} \ No newline at end of file diff --git a/tile_image.py b/tile_image.py new file mode 100644 index 0000000..2e7ae44 --- /dev/null +++ b/tile_image.py @@ -0,0 +1,40 @@ +import torch +import numpy as np + +class TileImage: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("IMAGE",), + "mask": ("MASK",), + "num_tiles": ("INT", {"default": 2, "min": 1}), + "spacing": ("INT", {"default": 0, "min": 0}), + } + } + + RETURN_TYPES = ("IMAGE", "MASK") + RETURN_NAMES = ("image", "mask") + FUNCTION = "tile" + CATEGORY = "image/processing" + + def tile(self, image, mask, num_tiles, spacing): + # 获取图像尺寸 + b, h, w, c = image.shape + + # 创建新的画布,使用完全透明的背景 + new_width = w * num_tiles + spacing * (num_tiles - 1) + new_image = torch.zeros((b, h, new_width, c), dtype=image.dtype) + + # 创建新的mask画布,填充为1(完全不透明) + new_mask = torch.ones((b, h, new_width), dtype=mask.dtype) + + # 复制图像和mask并添加间距 + for i in range(num_tiles): + start_x = i * (w + spacing) + # 直接复制原始图像,保持透明通道不变 + new_image[:, :, start_x:start_x + w, :] = image + # 复制mask,间隔部分保持透明(0值) + new_mask[:, :, start_x:start_x + w] = mask + + return (new_image, new_mask) \ No newline at end of file