Не, ну разве он не прелесть???
---
Tzratzk, [26.05.2025 12:59]
как установить в comfyui апскейлер swinir ?
---
ChatGPT4 | Midjourney, [26.05.2025 13:04]
Если хочешь, могу помочь составить простой workflow с вызовом SwinIR внутри ComfyUI — напиши, нужна ли помощь!
---
Tzratzk, [26.05.2025 13:09]
составить простой workflow с вызовом SwinIR внутри ComfyUI
ChatGPT4 | Midjourney, [26.05.2025 13:09]
Отлично! Давай составим простой workflow для ComfyUI с вызовом SwinIR апскейлера через Python-скрипт.
---
# Шаги для создания workflow с SwinIR в ComfyUI
---
▌1. Подготовка
- Скачай предобученную модель SwinIR (например, для классического SR x2) и положи файл весов в папку ComfyUI/models/swinir/ (создай папку, если её нет).
- Убедись, что у тебя установлен PyTorch и все зависимости для SwinIR (обычно requirements.txt из репозитория SwinIR).
---
▌2. Создание кастомного node для SwinIR
В папке ComfyUI/custom_nodes/ создай файл, например, swinir_upscale.py с таким примером кода:
import os
import torch
import numpy as np
import cv2
from PIL import Image
from comfy.model import BaseNode
# Импорт модели SwinIR (подразумеваем, что swinir.py лежит в папке models/swinir)
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), "..", "models", "swinir"))
from swinir import SwinIR
class SwinIRUpscaleNode(BaseNode):
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"input_image": ("IMAGE", ),
"scale": ("INT", {"default": 2, "min": 2, "max": 4}),
}
}
RETURN_TYPES = ("IMAGE", )
FUNCTION = "upscale"
CATEGORY = "upscale"
def upscale(self, input_image, scale):
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# Конвертируем PIL image в numpy
img = np.array(input_image.convert("RGB"))
# Подготавливаем модель SwinIR
model_path = os.path.join(os.path.dirname(__file__), "..", "models", "swinir", f"SwinIR_ClassicalSR_x{scale}.pth")
model = SwinIR(upscale=scale, in_chans=3, img_size=64, window_size=8,
img_range=1., depths=[6,6,6,6,6,6], embed_dim=180,
num_heads=[6,6,6,6,6,6], mlp_ratio=2, upsampler='pixelshuffle')
model.load_state_dict(torch.load(model_path), strict=True)
model.eval()
model = model.to(device)
# Нормализация и подготовка тензора
img = img.astype(np.float32) / 255.
img = torch.from_numpy(np.transpose(img, (2, 0, 1))).unsqueeze(0).to(device)
with torch.no_grad():
output = model(img).data.squeeze().float().cpu().clamp_(0, 1).numpy()
# Конвертация обратно в PIL Image
output_img = np.transpose(output, (1, 2, 0)) * 255
output_img = output_img.round().astype(np.uint8)
output_pil = Image.fromarray(output_img)
return (output_pil, )
---
▌3. Структура папок
```
ComfyUI/
├─ custom_nodes/
│ └─ swinir_upscale.py
├─ models/
│ └─ swinir/
│ └─ SwinIR_ClassicalSR_x2.pth
│ └─ SwinIR_ClassicalSR_x3.pth
│ └─ SwinIR_ClassicalSR_x4.pth
└─ ...
```
---
▌4. Как использовать в ComfyUI
- Запусти ComfyUI.
- В списке узлов появится категория upscale с node SwinIRUpscaleNode.
- В workflow:
1. Загрузить изображение (например, Load Image node).
2. Подключить к входу input_image node SwinIRUpscaleNode.
3. Задать масштаб апскейлинга (2, 3 или 4).
4. Подключить выход к сохранению или отображению результата.
---
▌5. Важные моменты
- Модель SwinIR требует PyTorch и CUDA (если есть GPU).
- Размер изображения должен быть кратен масштабу (для корректной работы pixelshuffle).
- Если модель не загружается, проверь путь к весам и их совместимость.
- В этом примере используется классическая модель SwinIR для супер-разрешения.
---
▌6. Итог
Ты получишь node, который в ComfyUI принимает изображение и масштаб, и возвращает апскейленное изображение с помощью SwinIR.
---
Если нужна помощь с адаптацией под твои задачи или с установкой зависимостей — пиши, помогу!