Dreamspire's picture
custom_nodes
f2dbf59
raw
history blame
2.05 kB
import os.path
from pathlib import Path
import torch
from PIL import Image
import math
from torchvision.transforms import ToPILImage
import folder_paths
from .imagefunc import files_for_uform_gen2_qwen, StopOnTokens, UformGen2QwenChat, clear_memory, log
NODE_NAME = "QWenImage2Prompt"
# Example of integrating UformGen2QwenChat into a node-like structure
class QWenImage2Prompt:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"image": ("IMAGE",),
"question": ("STRING", {"multiline": False, "default": "describe this image",},),
},
}
RETURN_TYPES = ("STRING",)
RETURN_NAMES = ("text",)
FUNCTION = "uform_gen2_qwen_chat"
CATEGORY = '😺dzNodes/LayerUtility/Prompt'
def uform_gen2_qwen_chat(self, image, question):
chat_model = UformGen2QwenChat()
history = [] # Example empty history
pil_image = ToPILImage()(image[0].permute(2, 0, 1))
width, height = pil_image.size
ratio = width / height
if width * height > 1024 * 1024:
target_width = math.sqrt(ratio * 1024 * 1024)
target_height = target_width / ratio
target_width = int(target_width)
target_height = int(target_height)
pil_image = pil_image.resize((target_width, target_height), Image.LANCZOS)
temp_path = files_for_uform_gen2_qwen / "temp.png"
pil_image.save(temp_path)
question = f"{question} but output no more then 80 words."
response = chat_model.chat_response(question, history, temp_path)
# Cleanup
del chat_model
clear_memory()
ret_text = response.split("assistant\n", 1)[1]
log(f"{NODE_NAME} Processed, Question: {question}, Response: {ret_text} ", message_type='finish')
return (ret_text, )
NODE_CLASS_MAPPINGS = {
"LayerUtility: QWenImage2Prompt": QWenImage2Prompt
}
NODE_DISPLAY_NAME_MAPPINGS = {
"LayerUtility: QWenImage2Prompt": "LayerUtility: QWenImage2Prompt"
}