Move the translation nodes to ComfyUI-kaytool-translate

The Comfy Registry's policy-v0.2 scanner flags every version that makes
a network request for manual review. AIO, Tencent and Baidu translaters
are nothing but a network request, and they were the only network code
left in this package — the other 24 nodes never touch it. Keeping them
here meant every release of KayTool waited on a human.

They now live unchanged in kk8bit/ComfyUI-kaytool-translate, installed
from Git, with identical node identifiers so existing workflows recover
by installing that package. requests leaves the dependency list.
This commit is contained in:
kk8bit
2026-09-20 22:54:46 +08:00
parent d1a90c89bc
commit 523631a8e0
14 changed files with 11 additions and 463 deletions
+2
View File
@@ -1,6 +1,8 @@
# Changelog
## [未发布 Unreleased]
- 移除 AIO / Tencent / Baidu 三个翻译节点,改为独立仓库 [ComfyUI-kaytool-translate](https://github.com/kk8bit/ComfyUI-kaytool-translate)(Git 安装,节点标识不变,旧工作流装上即恢复)。原因:Registry 安全扫描会把任何网络请求标记为需人工审核,翻译节点无法避免;拆出后核心包不再被卡。核心包同时不再依赖 `requests`
- Removed the AIO / Tencent / Baidu translation nodes into a separate repository, [ComfyUI-kaytool-translate](https://github.com/kk8bit/ComfyUI-kaytool-translate) (installed from Git; node identifiers unchanged, so existing workflows recover once it is installed). The Registry's security scan flags any network request for manual review, which translation cannot avoid; splitting them out keeps the core package from being held up. The core package no longer depends on `requests`
- 资源监视器改为前端按需轮询(0.5–2 秒自适应),不再由后端常驻任务推送:面板关闭或标签页在后台时后端完全不采集;多标签页共享 200ms 缓存
- The resource monitor now polls on demand from the frontend (adaptive 0.5–2s) instead of a resident backend task pushing over WebSocket: nothing is collected while the panel is closed or the tab is in the background; multiple tabs share a 200ms cache
- RemBG 模型不再强制下载到插件目录,改由 rembg 自行管理(默认 `~/.rembg/models/`,可用 `REMBG_HOME` 环境变量更改)。此前的做法会修改整个进程的环境变量,影响同一 ComfyUI 内其他使用 rembg 的插件。**升级后首次使用会重新下载模型**,原插件目录下 `models/RemBG/` 里的文件可删除或移动过去
+7 -34
View File
@@ -9,6 +9,8 @@ This is a custom node utility package developed for ComfyUI. Initially created f
## 最新更新 / Last Update
### [未发布 Unreleased]
- 移除 AIO / Tencent / Baidu 三个翻译节点,改为独立仓库 [ComfyUI-kaytool-translate](https://github.com/kk8bit/ComfyUI-kaytool-translate)(Git 安装,节点标识不变,旧工作流装上即恢复)。原因:Registry 安全扫描会把任何网络请求标记为需人工审核,翻译节点无法避免;拆出后核心包不再被卡。核心包同时不再依赖 `requests`
- Removed the AIO / Tencent / Baidu translation nodes into a separate repository, [ComfyUI-kaytool-translate](https://github.com/kk8bit/ComfyUI-kaytool-translate) (installed from Git; node identifiers unchanged, so existing workflows recover once it is installed). The Registry's security scan flags any network request for manual review, which translation cannot avoid; splitting them out keeps the core package from being held up. The core package no longer depends on `requests`
- 资源监视器改为前端按需轮询(0.5–2 秒自适应),不再由后端常驻任务推送:面板关闭或标签页在后台时后端完全不采集;多标签页共享 200ms 缓存
- The resource monitor now polls on demand from the frontend (adaptive 0.5–2s) instead of a resident backend task pushing over WebSocket: nothing is collected while the panel is closed or the tab is in the background; multiple tabs share a 200ms cache
- RemBG 模型不再强制下载到插件目录,改由 rembg 自行管理(默认 `~/.rembg/models/`,可用 `REMBG_HOME` 环境变量更改)。此前的做法会修改整个进程的环境变量,影响同一 ComfyUI 内其他使用 rembg 的插件。**升级后首次使用会重新下载模型**,原插件目录下 `models/RemBG/` 里的文件可删除或移动过去
@@ -221,23 +223,6 @@ https://github.com/user-attachments/assets/b8d1d3f0-04d1-46c5-968a-e433778b73e6
## 自动翻译节点 AIOTranslater
- 支持单文本输入的自动翻译。
- 内置高效 AI 翻译引擎,无需手动获取 API 密钥。
- 提供高质量翻译结果,适用于多种语言场景。
- 支持多种目标语言选择(英语、中文、德语、西班牙语等)。
- 自动检测源语言,简化用户操作。
- 高效稳定,适合快速集成到工作流中。
- Supports automatic translation of single text input.
- Built-in high-efficiency AI translation engine, no need to manually obtain API keys.
- Provides high-quality translations for various language scenarios.
- Offers multiple target language options (English, Chinese, German, Spanish, etc.).
- Automatically detects source language for simplified user experience.
- Efficient and stable, ideal for quick integration into workflows.
## 大壮提示词生成节点 StrongPrompt
- 基于 CLIP 模型生成高质量的正向和负向提示词嵌入。
@@ -323,23 +308,6 @@ In `filename_prefix`, you can use the following dynamic variables to customize t
## 百度翻译节点 BaiduTranslater
- 使用百度翻译 API 提供高质量的多语言翻译服务。
- 支持自动检测源语言及多种目标语言选择(中文简体、中文繁体、英语等)。
- 需要用户提供百度 API 的 App ID 和 App Key(可在 [百度翻译开放平台](https://fanyi-api.baidu.com/) 注册获取)。
- 自动保存用户输入的 API 配置,简化后续使用。
- 提供灵活的启用/禁用翻译功能开关。
- 适用于需要精准翻译的多语言工作流。
- Utilizes Baidu Translate API to provide high-quality multi-language translation services.
- Supports automatic detection of source language and multiple target language options (Simplified Chinese, Traditional Chinese, English, etc.).
- Requires users to provide Baidu API App ID and App Key (can be obtained by registering at [Baidu Translate Open Platform](https://fanyi-api.baidu.com/)).
- Automatically saves user-entered API configurations for simplified subsequent use.
- Provides a flexible switch to enable or disable the translation function.
- Suitable for multi-language workflows requiring precise translations.
## 通用显示节点 DisplayAny
- 可接收任意类型的输入并将其转换为字符串显示。
@@ -504,6 +472,11 @@ In `filename_prefix`, you can use the following dynamic variables to customize t
# 翻译节点 Translation Nodes
自 0.71.1 起,`𝙆 AIO Translater`、`𝙆 Tencent Translater`、`𝙆 Baidu Translater` 三个翻译节点已移出本包,改为独立仓库 [ComfyUI-kaytool-translate](https://github.com/kk8bit/ComfyUI-kaytool-translate),以 Git 方式安装。节点标识不变,旧工作流装上即可继续使用。原因:Comfy Registry 的安全扫描会将任何发起网络请求的节点标记为需人工审核,而翻译节点无法不发请求。
As of 0.71.1 the three translation nodes live in a separate repository, [ComfyUI-kaytool-translate](https://github.com/kk8bit/ComfyUI-kaytool-translate), installed from Git. Node identifiers are unchanged, so existing workflows work again once it is installed. The Comfy Registry's security scan flags any node that makes network requests for manual review, and translation cannot avoid that.
# 安装 Installation
- 使用 ComfyUI Manager 搜索 `KayTool` 安装。
-9
View File
@@ -7,13 +7,10 @@ from .api import clean_vram
from .nodes.custom_save_image import CustomSaveImage
from .nodes.color_adjustment import ColorAdjustment
from .nodes.strong_prompt import StrongPrompt
from .nodes.baidu_translater import BaiduTranslater
from .nodes.display_any import DisplayAny
from .nodes.abc_math import AbcMath
from .nodes.image_size_extractor import ImageSizeExtractor
from .nodes.tencent_translater import TencentTranslater
from .nodes.text import Text
from .nodes.aio_translater import AIOTranslater
from .nodes.slider_1000 import Slider1000
from .nodes.slider_100 import Slider100
from .nodes.slider_10 import Slider10
@@ -36,13 +33,10 @@ NODE_CLASS_MAPPINGS = {
"Custom_Save_Image": CustomSaveImage,
"Color_Adjustment": ColorAdjustment,
"Strong_Prompt": StrongPrompt,
"Baidu_Translater": BaiduTranslater,
"Display_Any": DisplayAny,
"Abc_Math": AbcMath,
"Image_Size_Extractor": ImageSizeExtractor,
"Tencent_Translater": TencentTranslater,
"Text": Text,
"AIO_Translater": AIOTranslater,
"Slider_1000": Slider1000,
"Slider_100": Slider100,
"Slider_10": Slider10,
@@ -66,13 +60,10 @@ NODE_DISPLAY_NAME_MAPPINGS = {
"Custom_Save_Image": "𝙆 Custom Save Image",
"Color_Adjustment": "𝙆 Color Adjustment",
"Strong_Prompt": "𝙆 Strong Prompt",
"Baidu_Translater": "𝙆 Baidu Translater",
"Display_Any": "𝙆 Display Any",
"Abc_Math": "𝙆 abc Math",
"Image_Size_Extractor": "𝙆 Image Size Extractor",
"Tencent_Translater": "𝙆 Tencent Translater",
"Text": "𝙆 Text",
"AIO_Translater": "𝙆 AIO Translater",
"Slider_1000": "𝙆 Slider 1000",
"Slider_100": "𝙆 Slider 100",
"Slider_10": "𝙆 Slider 10",
-1
View File
@@ -6,7 +6,6 @@
},
"nodeCategories": {
"Image": "Image",
"Translate": "Translate",
"Slider": "Slider",
"Remove BG": "Remove BG",
"Mask": "Mask"
-1
View File
@@ -6,7 +6,6 @@
},
"nodeCategories": {
"Image": "Image",
"Translate": "Traducteur",
"Slider": "Contrôleur de curseur",
"Remove BG": "Supprimer l'arrière-plan",
"Mask": "Masque"
-1
View File
@@ -6,7 +6,6 @@
},
"nodeCategories": {
"Image": "画像",
"Translate": "翻訳",
"Slider": "スライダー",
"Remove BG": "背景除去",
"Mask": "マスク"
-1
View File
@@ -6,7 +6,6 @@
},
"nodeCategories": {
"Image": "이미지",
"Translate": "번역",
"Slider": "슬라이더",
"Remove BG": "배경 제거",
"Mask": "마스크"
-1
View File
@@ -6,7 +6,6 @@
},
"nodeCategories": {
"Image": "Изображение",
"Translate": "Перевод",
"Slider": "Слайдер",
"Remove BG": "Удалить фон",
"Mask": "Маска"
-1
View File
@@ -10,7 +10,6 @@
},
"nodeCategories": {
"Image": "图像",
"Translate": "翻译器",
"Slider": "滑块控制器",
"Remove BG": "背景移除",
"Mask": "遮罩"
-109
View File
@@ -1,109 +0,0 @@
import json
import requests
# (连接超时, 读取超时)。requests 默认永不超时,而节点是在工作流线程里同步执行的,
# 对端连上却不回包就会把整个队列永久堵死,且没有任何报错可循。
TRANSLATE_TIMEOUT = (10, 30)
class AIOTranslater:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(s):
input_types = {
"required": {
"Text": ("STRING", {"multiline": True}),
"To": ([
"English", # 英语
"中文", # 中文 (zh)
"Deutsch", # 德语
"Español", # 西班牙语
"Français", # 法语
"Italiano", # 意大利语
"日本語", # 日语
"한국어", # 韩语
"Português", # 葡萄牙语
"Русский", # 俄语
"العربية", # 阿拉伯语
"ไทย", # 泰语
"Türkçe", # 土耳其语
"Tiếng Việt" # 越南语
], {"default": "English"}),
}
}
return input_types
CATEGORY = "KayTool/Translate"
RETURN_TYPES = ("STRING",)
RETURN_NAMES = ("Translated_Text",)
FUNCTION = "translate_text"
DESCRIPTION = "The AIOTranslater node provides automatic translation of a single text input using the Tencent Translate API with support for multiple target languages."
def initData(self, source_lang, target_lang, translate_text):
return {
"header": {
"fn": "auto_translation",
"client_key": "browser-chrome-110.0.0-Mac OS-df4bd4c5-a65d-44b2-a40f-42f34f3535f2-1677486696487"
},
"type": "plain",
"model_category": "normal",
"source": {
"lang": source_lang,
"text_list": [translate_text]
},
"target": {
"lang": target_lang
}
}
def translate_text(self, Text, To):
lang_map = {
"English": "en",
"中文": "zh",
"Deutsch": "de",
"Español": "es",
"Français": "fr",
"Italiano": "it",
"日本語": "ja",
"한국어": "ko",
"Português": "pt",
"Русский": "ru",
"العربية": "ar",
"ไทย": "th",
"Türkçe": "tr",
"Tiếng Việt": "vi"
}
target_lang = lang_map[To]
def translate_single_text(text):
if not text:
return ""
url = 'https://transmart.qq.com/api/imt'
post_data = self.initData(None, target_lang, text)
headers = {
'Content-Type': 'application/json',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36',
'referer': 'https://transmart.qq.com/zh-CN/index'
}
try:
response = requests.post(url, headers=headers, data=json.dumps(post_data),
timeout=TRANSLATE_TIMEOUT)
result = response.json()
if response.status_code != 200 or 'auto_translation' not in result or not result['auto_translation']:
error_msg = f"Translation failed with status code {response.status_code}: {result.get('error_msg', 'Unknown error')}"
print(error_msg)
raise RuntimeError(error_msg)
return '\n'.join(result['auto_translation'])
except Exception as e:
error_msg = f"Error during translation: {str(e)}"
print(error_msg)
raise RuntimeError(error_msg)
translated_text = translate_single_text(Text)
return (translated_text,)
-167
View File
@@ -1,167 +0,0 @@
import os
import json
import requests
# (连接超时, 读取超时)。requests 默认永不超时,而节点是在工作流线程里同步执行的,
# 对端连上却不回包就会把整个队列永久堵死,且没有任何报错可循。
TRANSLATE_TIMEOUT = (10, 30)
import random
from hashlib import md5
JSON_DIR = os.path.join(os.path.dirname(__file__), "../json")
def make_md5(s, encoding='utf-8'):
return md5(s.encode(encoding)).hexdigest()
class BaiduTranslater:
_config_data = None
@classmethod
def _load_config(cls):
if cls._config_data is not None:
return
config_path = os.path.join(JSON_DIR, "Baidu_Translater_config.json")
try:
with open(config_path, 'r', encoding='utf-8') as f:
cls._config_data = json.load(f)
except Exception as e:
print(f"Error loading Baidu Translater config JSON: {e}")
cls._config_data = {}
@classmethod
def INPUT_TYPES(s):
s._load_config()
input_types = {
"required": {
"Text_A": ("STRING", {"multiline": True, "placeholder": "Text A"}),
"Text_B": ("STRING", {"multiline": True, "placeholder": "Text B"}),
"Translate": ("BOOLEAN", {"default": True, "label": "Enable Translation (启用翻译)", "tooltip": "Toggle this switch to enable or disable the translation function. (切换此开关以启用或禁用翻译功能。)"}),
"From": (
[
'Auto',
'中文(简体)',
'中文(繁体)',
'English'
],
{"default": "Auto", "tooltip": "Select the source language of the text. 'Auto' will automatically detect the language. (选择文本的源语言。'自动检测'将自动识别语言。)"}
),
"To": ([
'English',
'中文(简体)',
'中文(繁体)'
], {"default": "English", "tooltip": "Choose the target language into which the text will be translated. (选择文本要翻译成的目标语言。)"}),
"ID": ("STRING", {"multiline": False, "placeholder": "Input AppId (输入 AppId)",
"tooltip": "Enter your Baidu API App ID here. You can obtain an App ID and API key by registering at https://fanyi-api.baidu.com/. (在此处输入你的百度 API App ID。你可以通过注册 https://fanyi-api.baidu.com/ 获得 App ID 和 API 密钥。)"}),
"Key": ("STRING", {"multiline": False, "placeholder": "Input AppKey (输入 AppKey)",
"tooltip": "Enter your Baidu API App Key here. You can obtain an App ID and API key by registering at https://fanyi-api.baidu.com/. (在此处输入你的百度 API App Key。你可以通过注册 https://fanyi-api.baidu.com/ 获得 App ID 和 API 密钥。)"}),
}
}
if s._config_data:
input_types["required"]["ID"] = ("STRING", {"multiline": False, "default": s._config_data.get('baidu_appid', ''), "tooltip": input_types["required"]["ID"][1]["tooltip"]})
input_types["required"]["Key"] = ("STRING", {"multiline": False, "default": s._config_data.get('baidu_appkey', ''), "tooltip": input_types["required"]["Key"][1]["tooltip"]})
return input_types
CATEGORY = "KayTool/Translate"
RETURN_TYPES = ("STRING", "STRING")
RETURN_NAMES = ("A", "B")
FUNCTION = "translate_texts"
OUTPUT_TOOLTIPS = (
"Translated text corresponding to input Text A. (对应输入文本 A 的翻译文本。)",
"Translated text corresponding to input Text B. (对应输入文本 B 的翻译文本。)"
)
DESCRIPTION = "The BaiduTranslater node provides a convenient way to translate text using the Baidu Translate API. It supports multiple languages and allows users to specify source and target languages. Users must provide their own Baidu API App ID and App Key, which can be obtained from https://fanyi-api.baidu.com/. (BaiduTranslater 节点提供了一种使用百度翻译 API 翻译文本的便捷方式。它支持多种语言,并允许用户指定源语言和目标语言。用户必须提供自己的百度 API App ID 和 App Key,这些可以从 https://fanyi-api.baidu.com/ 获取。)"
def __init__(self):
self.appid, self.appkey = self.load_config()
def load_config(self):
self._load_config()
return self._config_data.get('baidu_appid', ''), self._config_data.get('baidu_appkey', '')
def save_config(self, appid, appkey):
config_path = os.path.join(JSON_DIR, "Baidu_Translater_config.json")
config = {'baidu_appid': appid, 'baidu_appkey': appkey}
try:
with open(config_path, 'w', encoding='utf-8') as f:
json.dump(config, f, ensure_ascii=False, indent=4)
except Exception as e:
print(f"Error saving Baidu Translater config JSON: {e}")
def translate_texts(self, Text_A, Text_B, Translate, From, To, ID, Key):
if not Translate:
return (Text_A, Text_B)
if ID != self.appid or Key != self.appkey:
self.save_config(ID, Key)
self.appid, self.appkey = ID, Key
from_lang_map = {
'Auto': 'auto',
'中文(简体)': 'zh',
'中文(繁体)': 'cht',
'English': 'en'
}
to_lang_map = {
'English': 'en',
'中文(简体)': 'zh',
'中文(繁体)': 'cht'
}
from_lang = from_lang_map[From]
to_lang = to_lang_map[To]
endpoint = 'https://api.fanyi.baidu.com'
path = '/api/trans/vip/translate'
url = endpoint + path
def translate_text(text):
if not text:
return ""
query = text
salt = random.randint(32768, 65536)
sign = make_md5(self.appid + query + str(salt) + self.appkey)
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
payload = {'appid': self.appid, 'q': query, 'from': from_lang, 'to': to_lang, 'salt': salt, 'sign': sign}
try:
r = requests.post(url, data=payload, headers=headers, timeout=TRANSLATE_TIMEOUT)
result = r.json()
except requests.exceptions.RequestException as e:
# 与另外两个翻译节点保持一致:网络层的失败也转成可读的 RuntimeError,
# 而不是把 requests 的异常原样抛给 ComfyUI。
error_msg = f"Error during translation: {e}"
print(error_msg)
raise RuntimeError(error_msg)
if r.status_code != 200 or 'error_code' in result:
error_msg = f"Translation failed with status code {r.status_code}: {result.get('error_msg', 'Unknown error')}"
print(error_msg)
raise RuntimeError(error_msg)
try:
return result['trans_result'][0]['dst']
except (IndexError, KeyError):
print("Unexpected response format:", result)
raise RuntimeError("Unexpected response format from translation service.")
try:
translated_a = translate_text(Text_A)
translated_b = translate_text(Text_B)
except RuntimeError as e:
raise RuntimeError(f"An error occurred during translation: {e}")
return (translated_a, translated_b)
os.makedirs(JSON_DIR, exist_ok=True)
-135
View File
@@ -1,135 +0,0 @@
import json
import requests
# (连接超时, 读取超时)。requests 默认永不超时,而节点是在工作流线程里同步执行的,
# 对端连上却不回包就会把整个队列永久堵死,且没有任何报错可循。
TRANSLATE_TIMEOUT = (10, 30)
class TencentTranslater:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(s):
input_types = {
"required": {
"Text_A": ("STRING", {"multiline": True}),
"Text_B": ("STRING", {"multiline": True}),
"Translate": ("BOOLEAN", {"default": True}),
"From": ([
"Auto",
"English", # 英语
"中文", # 中文 (zh)
"Deutsch", # 德语
"Español", # 西班牙语
"Français", # 法语
"Italiano", # 意大利语
"日本語", # 日语
"한국어", # 韩语
"Português", # 葡萄牙语
"Русский", # 俄语
"العربية", # 阿拉伯语
"ไทย", # 泰语
"Türkçe", # 土耳其语
"Tiếng Việt" # 越南语
], {"default": "Auto"}),
"To": ([
"English", # 英语
"中文", # 中文 (zh)
"Deutsch", # 德语
"Español", # 西班牙语
"Français", # 法语
"Italiano", # 意大利语
"日本語", # 日语
"한국어", # 韩语
"Português", # 葡萄牙语
"Русский", # 俄语
"العربية", # 阿拉伯语
"ไทย", # 泰语
"Türkçe", # 土耳其语
"Tiếng Việt" # 越南语
], {"default": "English"}),
}
}
return input_types
CATEGORY = "KayTool/Translate"
RETURN_TYPES = ("STRING", "STRING")
RETURN_NAMES = ("A", "B")
FUNCTION = "translate_texts"
DESCRIPTION = "The TencentTranslater node provides a convenient way to translate text using the Tencent Translate API. It supports multiple languages and allows users to specify source and target languages."
def initData(self, source_lang, target_lang, translate_text):
return {
"header": {
"fn": "auto_translation",
"client_key": "browser-chrome-110.0.0-Mac OS-df4bd4c5-a65d-44b2-a40f-42f34f3535f2-1677486696487"
},
"type": "plain",
"model_category": "normal",
"source": {
"lang": source_lang,
"text_list": [translate_text]
},
"target": {
"lang": target_lang
}
}
def translate_texts(self, Text_A, Text_B, Translate, From, To):
if not Translate:
return (Text_A, Text_B)
lang_map = {
"Auto": None,
"English": "en",
"中文": "zh",
"Deutsch": "de",
"Español": "es",
"Français": "fr",
"Italiano": "it",
"日本語": "ja",
"한국어": "ko",
"Português": "pt",
"Русский": "ru",
"العربية": "ar",
"ไทย": "th",
"Türkçe": "tr",
"Tiếng Việt": "vi"
}
source_lang = lang_map[From]
target_lang = lang_map[To]
def translate_text(text):
if not text:
return ""
url = 'https://transmart.qq.com/api/imt'
post_data = self.initData(source_lang, target_lang, text)
headers = {
'Content-Type': 'application/json',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36',
'referer': 'https://transmart.qq.com/zh-CN/index'
}
try:
response = requests.post(url, headers=headers, data=json.dumps(post_data),
timeout=TRANSLATE_TIMEOUT)
result = response.json()
if response.status_code != 200 or 'auto_translation' not in result or not result['auto_translation']:
error_msg = f"Translation failed with status code {response.status_code}: {result.get('error_msg', 'Unknown error')}"
print(error_msg)
raise RuntimeError(error_msg)
return '\n'.join(result['auto_translation'])
except Exception as e:
error_msg = f"Error during translation: {str(e)}"
print(error_msg)
raise RuntimeError(error_msg)
translated_a = translate_text(Text_A)
translated_b = translate_text(Text_B)
return (translated_a, translated_b)
+2 -2
View File
@@ -1,9 +1,9 @@
[project]
name = "kaytool"
description ="KayTool boosts ComfyUI workflow efficiency with powerful tools like: image processing (resize, color, blur, expand, merge, crop), background/mask tasks via BiRefNet/RemBG, wireless data transfer (Set&Get), AI translation (Tencent/Baidu), Professional high-precision resource monitoring, dynamic math operations, flexible text handling, precision sliders, metadata/color profile-supported image saving, batch processing via folder loading, canvas node map export as PNG with metadata, node alignment toolbar with custom styles, and a custom browser tab icon."
description ="KayTool boosts ComfyUI workflow efficiency with powerful tools like: image processing (resize, color, blur, expand, merge, crop), background/mask tasks via BiRefNet/RemBG, wireless data transfer (Set&Get), Professional high-precision resource monitoring, dynamic math operations, flexible text handling, precision sliders, metadata/color profile-supported image saving, batch processing via folder loading, canvas node map export as PNG with metadata, node alignment toolbar with custom styles, and a custom browser tab icon."
version = "0.71.0"
license = {file = "LICENSE"}
dependencies = ["rembg", "timm", "opencv-python", "py-cpuinfo", "pynvml", "pilgram", "requests"]
dependencies = ["rembg", "timm", "opencv-python", "py-cpuinfo", "pynvml", "pilgram"]
[project.urls]
Repository = "https://github.com/kk8bit/kaytool"
-1
View File
@@ -4,4 +4,3 @@ opencv-python
py-cpuinfo
pynvml
pilgram
requests