From c2af538cdf6869f68f5b6d1c5d9292bad9cc46cd Mon Sep 17 00:00:00 2001 From: Cyber-BlackCat Date: Wed, 12 Mar 2025 17:04:44 +0800 Subject: [PATCH] Delete workflow/lib directory --- workflow/lib/__init__.py | 0 workflow/lib/extra_option.json | 70 ------------------ workflow/lib/xfile.py | 34 --------- workflow/lib/ximg.py | 129 --------------------------------- workflow/lib/xmodel.py | 23 ------ 5 files changed, 256 deletions(-) delete mode 100644 workflow/lib/__init__.py delete mode 100644 workflow/lib/extra_option.json delete mode 100644 workflow/lib/xfile.py delete mode 100644 workflow/lib/ximg.py delete mode 100644 workflow/lib/xmodel.py diff --git a/workflow/lib/__init__.py b/workflow/lib/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/workflow/lib/extra_option.json b/workflow/lib/extra_option.json deleted file mode 100644 index afb216c..0000000 --- a/workflow/lib/extra_option.json +++ /dev/null @@ -1,70 +0,0 @@ -[ - { - "name": "replace_character_names", - "prompt": "If there is a person/character in the image you must refer to them as {name}." - }, - { - "name": "exclude_unchangeable_attributes", - "prompt": "Do NOT include information about people/characters that cannot be changed (like ethnicity, gender, etc), but do still include changeable attributes (like hair style)." - }, - { - "name": "include_lighting_details", - "prompt": "Include information about lighting." - }, - { - "name": "include_camera_angle", - "prompt": "Include information about camera angle." - }, - { - "name": "mention_watermark_presence", - "prompt": "Include information about whether there is a watermark or not." - }, - { - "name": "note_jpeg_artifacts", - "prompt": "Include information about whether there are JPEG artifacts or not." - }, - { - "name": "include_exif_data", - "prompt": "If it is a photo you MUST include information about what camera was likely used and details such as aperture, shutter speed, ISO, etc." - }, - { - "name": "exclude_sexual_content", - "prompt": "Do NOT include anything sexual; keep it PG." - }, - { - "name": "exclude_image_resolution", - "prompt": "Do NOT mention the image's resolution." - }, - { - "name": "describe_aesthetic_quality", - "prompt": "You MUST include information about the subjective aesthetic quality of the image from low to very high." - }, - { - "name": "include_composition_style", - "prompt": "Include information on the image's composition style, such as leading lines, rule of thirds, or symmetry." - }, - { - "name": "exclude_text_elements", - "prompt": "Do NOT mention any text that is in the image." - }, - { - "name": "specify_depth_of_field", - "prompt": "Specify the depth of field and whether the background is in focus or blurred." - }, - { - "name": "specify_lighting_sources", - "prompt": "If applicable, mention the likely use of artificial or natural lighting sources." - }, - { - "name": "avoid_ambiguous_language", - "prompt": "Do NOT use any ambiguous language." - }, - { - "name": "classify_image_as_sfw_nsfw", - "prompt": "Include whether the image is sfw, suggestive, or nsfw." - }, - { - "name": "describe_key_elements_only", - "prompt": "ONLY describe the most important elements of the image." - } -] diff --git a/workflow/lib/xfile.py b/workflow/lib/xfile.py deleted file mode 100644 index 7540e28..0000000 --- a/workflow/lib/xfile.py +++ /dev/null @@ -1,34 +0,0 @@ -import folder_paths -import os -import base64 -import numpy as np -from PIL import Image,ImageOps, ImageFilter - -import io - -comfy_path = os.path.dirname(folder_paths.__file__) -custom_nodes_path = os.path.join(comfy_path, "custom_nodes") - -# D:\comfyui\ComfyUI_windows_portable\ComfyUI\custom_nodes\Comfyui_CXH_ALY -# current_folder = os.path.dirname(os.path.abspath(__file__)) - -# 节点路径 -def node_path(node_name): - return os.path.join(custom_nodes_path,node_name) - -# 创建文件夹 -def mkdir(path): - folder = os.path.exists(path) - if not folder: #判断是否存在文件夹如果不存在则创建为文件夹 - os.makedirs(path) #makedirs 创建文件时如果路径不存在会创建这个路径 - -# 获取所有图片文件路径 -def get_all_image_paths(directory): - image_paths = [] - for root, dirs, files in os.walk(directory): - for file in files: - if file.lower().endswith(('.png', '.jpg', '.jpeg')): - image_paths.append(os.path.join(root, file)) - return image_paths - - diff --git a/workflow/lib/ximg.py b/workflow/lib/ximg.py deleted file mode 100644 index 2bee87a..0000000 --- a/workflow/lib/ximg.py +++ /dev/null @@ -1,129 +0,0 @@ -# -*- encoding: utf-8 -*- -''' -@File :ximg.py -@Description :图片转换工具 -''' - -import os -import torch -from PIL import Image, ImageOps, ImageSequence, ImageFile,UnidentifiedImageError -import numpy as np -import cv2 as cv -import io -import base64 -import requests -from io import BytesIO - -def tensor2pil(t_image: torch.Tensor) -> Image: - return Image.fromarray( - np.clip(255.0 * t_image.cpu().numpy().squeeze(), 0, 255).astype(np.uint8)) - -def pil2tensor(image:Image) -> torch.Tensor: - return torch.from_numpy(np.array(image).astype(np.float32) / 255.0).unsqueeze(0) - -def tensor2cv2(image:torch.Tensor) -> np.array: - if image.dim() == 4: - image = image.squeeze() - npimage = image.numpy() - cv2image = np.uint8(npimage * 255 / npimage.max()) - return cv.cvtColor(cv2image, cv.COLOR_RGB2BGR) - -def cv22pil(cv2_img:np.ndarray) -> Image: - cv2_img = cv.cvtColor(cv2_img, cv.COLOR_BGR2RGB) - return Image.fromarray(cv2_img) - -# pil转io -def pil2iobyte(pil_image,format='PNG'): - byte_arr = io.BytesIO() - pil_image.save(byte_arr, format=format) - byte_arr = byte_arr.getvalue() - return byte_arr - -# pil转64 -def pilTobase64(pil_image,format='PNG'): - byte_arr = pil2iobyte(pil_image,format) - image_base64 = base64.b64encode(byte_arr).decode('utf-8') - return image_base64 - -def ioBytes2tensor(bytes): - image = Image.open(bytes) - return pil2tensor(image) - -def getImageSize(image): - if image.shape[0] > 0: - image = torch.unsqueeze(image[0], 0) - _image = tensor2pil(image) - - return (_image.width, _image.height) - -# 转成mask -def imageToMask(img): - i = img - if i.mode == 'I': - i = i.point(lambda i: i * (1 / 255)) - image = i.convert("RGB") - image = np.array(image).astype(np.float32) / 255.0 - image = torch.from_numpy(image)[None,] - - if 'A' in i.getbands(): - mask = np.array(i.getchannel('A')).astype(np.float32) / 255.0 - mask = 1. - torch.from_numpy(mask) - else: - mask = torch.zeros((64,64), dtype=torch.float32, device="cpu") - return tensor2pil(mask) - -# ret_masks.append(image2mask(_mask)) -def image2mask(image:Image) -> torch.Tensor: - _image = image.convert('RGBA') - alpha = _image.split() [0] - bg = Image.new("L", _image.size) - _image = Image.merge('RGBA', (bg, bg, bg, alpha)) - ret_mask = torch.tensor([pil2tensor(_image)[0, :, :, 3].tolist()]) - return ret_mask - -# 图像回帖 -def croppImg(original_image,cropped_avatar,left_x,top_y): - # 获取原始图像的大小 - original_width, original_height = original_image.size - return croppImageBySize(cropped_avatar,left_x,top_y,original_width,original_height) - -def croppImageBySize(cropped_avatar,left_x,top_y,original_w,original_h): - # 获取原始图像的大小 - original_width, original_height = original_w,original_h - # 获取头像的大小 - avatar_width, avatar_height = cropped_avatar.size - # 创建一个与原始图像相同大小的透明图像 - extended_image = Image.new("RGBA", (original_width, original_height), (0, 0, 0, 0)) - # 将裁剪后的头像粘贴到新图像 - extended_image.paste(cropped_avatar, (left_x, top_y), cropped_avatar) - - return extended_image - - -# 将图片转换为Base64编码 -def image_to_base64(image_path): - with open(image_path, 'rb') as image_file: - return base64.b64encode(image_file.read()).decode('utf-8') - -# 获取网络图片 -def img_from_url(url): - # 发送HTTP请求获取图片 - response = requests.get(url) - response.raise_for_status() # 如果请求失败,这会抛出异常 - # 将响应内容作为BytesIO对象打开,以便PIL可以读取它 - image = Image.open(BytesIO(response.content)) - return image - -def open_image(path): - prev_value = None - - try: - img = Image.open(path) - except (UnidentifiedImageError, ValueError): #PIL issues #4472 and #2445 - prev_value = ImageFile.LOAD_TRUNCATED_IMAGES - ImageFile.LOAD_TRUNCATED_IMAGES = True - img = Image.open(path) - finally: - if prev_value is not None: - ImageFile.LOAD_TRUNCATED_IMAGES = prev_value - return img \ No newline at end of file diff --git a/workflow/lib/xmodel.py b/workflow/lib/xmodel.py deleted file mode 100644 index e5c8b61..0000000 --- a/workflow/lib/xmodel.py +++ /dev/null @@ -1,23 +0,0 @@ -import os -import folder_paths -import json -from transformers import AutoProcessor - -# 下载hg 模型到本地 -def download_hg_model(model_id:str,exDir:str=''): - # 下载本地 - model_checkpoint = os.path.join(folder_paths.models_dir, exDir, os.path.basename(model_id)) - print(model_checkpoint) - if not os.path.exists(model_checkpoint): - from huggingface_hub import snapshot_download - snapshot_download(repo_id=model_id, local_dir=model_checkpoint, local_dir_use_symlinks=False) - return model_checkpoint - -# clip_model = AutoModelForCausalLM.from_pretrained( -# CLIP_PATH, -# device_map="cuda", -# trust_remote_code=True, -# torch_dtype="auto" -# ) - -# clip_processor = AutoProcessor.from_pretrained(CLIP_PATH, trust_remote_code=True) \ No newline at end of file