ComfyUI Extension: ComfyUI-QHNodes
A custom node collection developed for ComfyUI, offering preset dimensions for Latent, loading LoRA from folders, and integrating multiple commonly used custom nodes.
Custom Nodes (18)
- 🐟Batch Image Compressor
- (Down)load Checkpoint
- (Down)load ControlNet
- (Down)load LoRA
- (Down)load UNET
- (Down)load VAE
- 🐟Dynamic Expression
- 🐟File Save
- 🐟Gemini
- 🐟Image Compressor
- 🐟Image Count From Folder
- 🐟JSON Unpack
- 🐟Load Image From Folder
- 🐟Load LoRA (Folder)
- 🐟Load Prompts From Folder
- 🐟Preset Size Latent
- 🐟Sampler Settings
- 🐟Unified Prompt Generator
README
ComfyUI-QHNodes
为 ComfyUI 开发的自定义节点集合,提供预设尺寸预设Latent、从文件夹加载LoRA,以及集成了多个常用的自定义节点。
所有节点均为日常所用,偏定制化,如有需要,可参考
包含节点
主仓库节点
- 预设尺寸 (Preset Size Latent): 提供常用的图像尺寸预设
- 文件夹加载LoRA (Load LoRA from Folder): 批量加载指定文件夹中的 LoRA 模型
- 采样器设置 (Sampler Settings): 提供采样器和调度器设置的配置节点
- JSON解包 (JsonUnpack): 解析JSON字符串并提取指定的键值,支持最多5个键的提取
- Gemini图像分析 (Gemini): 使用Google Gemini模型进行图像分析和描述
- 文件夹图片统计 (Image Count From Folder): 统计指定文件夹中的图片数量
- 文件夹加载图片 (Load Image From Folder): 从指定文件夹中批量加载图片,支持设置起始索引和加载数量
- 文件保存 (File Save): 将文本内容保存到指定文件夹,支持多种文件格式
- 动态表达式 (Dynamic Expression): 执行动态Python表达式,支持最多5个参数
集成的子模块
以下是集成的常用节点,如果不需要所有节点,可单独下载:
-
- 字符串相关的自定义节点,提高在处理字符串时的效率和灵活性
- 支持字符串列表、翻译、CSV导入导出等功能
- 提供多种字符串选择方式:按序号选择、顺序循环、随机选择
-
- 用于图像压缩的ComfyUI自定义节点,支持JPEG、WEBP、PNG压缩格式和参数调整
-
- 提供ComfyUI网页截图、相机水印、自由模板转图片功能节点
-
- ComfyUI的模型下载节点,支持civitai和huggingface下的模型下载
安装方法
场景一:安装所有节点(推荐)
如果你想使用所有功能,可以一次性安装所有节点:
cd ComfyUI/custom_nodes/
git clone --recursive https://github.com/liuqianhonga/ComfyUI-QHNodes.git
场景二:仅安装主仓库节点
如果你只想使用预设尺寸和文件夹加载LoRA功能:
cd ComfyUI/custom_nodes/
git clone https://github.com/liuqianhonga/ComfyUI-QHNodes.git
子模块管理(可选)
- 添加子模块:如果之前只安装了主仓库,现在想添加子模块
cd ComfyUI/custom_nodes/ComfyUI-QHNodes
git submodule init
git submodule update
- 更新子模块:如果想更新子模块到最新版本
cd ComfyUI/custom_nodes/ComfyUI-QHNodes
git submodule update --remote
所有依赖会在 ComfyUI 启动时自动检查和安装。
更新说明
更新主仓库
cd ComfyUI/custom_nodes/ComfyUI-QHNodes
git pull
更新所有子模块
cd ComfyUI/custom_nodes/ComfyUI-QHNodes
git submodule update --remote
节点说明
🐟预设尺寸 (Preset Size Latent)
预设尺寸节点,支持以下预设:
竖版尺寸预设
-
竖版通用 (1024×1536)
- 标准的 2:3 竖版比例
- 适合壁纸和电子书封面
-
竖版高清 (1280×1536)
- 5:6 竖版比例
- 适合社交平台/AI作画
-
竖版长图 (1024×2048)
- 1:2 竖版比例
- 适合全身像/海报/建筑
-
竖版超清 (1536×2048)
- 适合精细插画/商业海报
-
竖版超长 (1080×2520)
- 9:21 竖版比例
- 适合长图文/漫画
横版尺寸预设
-
横版通用 (1536×1024)
- 3:2 横版比例
- 适合风景/场景
-
横版宽屏 (1920×1080)
- 16:9 横版比例
- 适合桌面壁纸
-
横版超宽 (2560×1080)
- 21:9 横版比例
- 适合全景图
手机尺寸预设
-
手机人像 16:9 (1080×1920)
- 适合人像/全身照
- 标准的手机全屏比例
-
手机人像 4:3 (1440×1920)
- 适合证件照/半身像
- 更宽的画面比例
-
手机场景 3:2 (1280×1920)
- 适合风景和建筑
- 宽屏构图
-
手机通用 (1024×1024)
- 适合头像和产品图
- 方形构图
-
手机高清 (1920×1920)
- 适合精致产品和艺术作品
- 高分辨率方形
-
手机壁纸 Mobile Wallpaper (1280×2048)
- 适合手机壁纸和移动设备内容
- 5:8 比例,垂直长图
视频尺寸预设
-
4K (3840×2160)
- 超高清视频标准
- 适合专业视频制作
-
2K (2048×1152)
- 高清视频标准
- 适合一般视频制作
-
1080p (1920×1080)
- 全高清视频标准
- 最常用的视频尺寸
-
电影 (2048×870)
- 2.35:1 电影比例
- 适合电影级内容
相片尺寸预设
-
4×6英寸 (1200×1800)
- 适合冲印照片
- 标准相片尺寸
-
5×7英寸 (1500×2100)
- 适合相框装饰
- 较大相片尺寸
社交媒体预设
-
抖音/快手 (1080×1920)
- 适合短视频封面
- 标准竖屏比例
-
朋友圈 (1080×1920)
- 适合生活分享
- 移动端优化
-
小红书 (1080×1350)
- 适合美食/穿搭
- 4:5 优化比例
-
微博 (1200×900)
- 适合图文/新闻
- 横版展示
-
B站封面 (1146×717)
- 适合视频封面
- 平台优化尺寸
国际社交平台预设
-
Instagram Story (1080×1920)
- 适合故事/Vlog
- Instagram 标准尺寸
-
TikTok Video (1080×1920)
- 适合短视频/舞蹈
- TikTok 优化尺寸
-
Facebook Post (1200×630)
- 适合社交分享
- Facebook 推荐尺寸
-
Twitter Post (1200×675)
- 适合资讯/新闻
- Twitter 优化尺寸
-
Youtube Cover (2560×1440)
- 适合视频封面
- Youtube 标准尺寸
自定义预设
你可以通过编辑以下文件来添加自己的预设尺寸:
nodes/preset_sizes.json
: 社交媒体预设nodes/camera_sizes.json
: 相机预设
格式如下:
{
"预设名称 (宽×高)": [宽度, 高度]
}
🐟Load LoRA (Folder)
从指定文件夹加载 LoRA 模型。支持以下功能:
- 基础模型:接收基础模型(MODEL)作为输入
- 所有的 LoRA 都将基于此模型进行加载
- 节点会自动克隆基础模型,不会修改原始模型
- 文件夹路径:支持多个文件夹路径,使用英文逗号分隔
- 示例:
myLoras, character/style1
- 相对路径基于 ComfyUI 的
models/loras
目录 - 如果路径不存在会在控制台输出提示信息
- 示例:
- 模型强度:调整 LoRA 对模型的影响程度
- 范围:-100.0 到 100.0
- 默认值:1.0
- 负值会产生相反的效果
- 合并加载:控制多个 LoRA 的加载方式
- 开启:将所有符合条件的 LoRA 合并加载到同一个模型中
- 关闭(默认):为每个 LoRA 创建单独的模型副本
- 实时预览:执行后会显示找到的 LoRA 文件列表,方便确认是否正确加载
使用示例
-
分别加载多个 LoRA(默认模式):
model: 基础模型 lora_folders: portraits, anime/style strength_model: 0.8 merge_loras: False (默认)
输出:多个模型,每个模型包含一个 LoRA
-
合并加载多个 LoRA:
model: 基础模型 lora_folders: myLoras strength_model: 1.0 merge_loras: True
输出:一个包含所有 LoRA 的模型
注意事项
- 文件夹路径使用正斜杠
/
分隔 - 目前仅支持 .safetensors 格式的 LoRA 文件
- 如果找不到任何符合条件的文件,节点会显示"No LoRA files found"
- 合并加载多个 LoRA 时,加载顺序与文件夹中的顺序一致
- 每个 LoRA 都会创建模型的副本,请注意内存使用
🐟采样器设置 (Sampler Settings)
采样器和调度器配置节点。支持以下功能:
- 采样器设置:支持所有 ComfyUI 内置采样器
- 调度器设置:支持所有 ComfyUI 内置调度器
- 采样步数:可配置范围 1-100,默认 30 步
- 降噪强度:可配置范围 0.0-1.0,默认 1.0
输出参数类型为 ANY,方便与其他节点对接。
🐟JSON解包 (JsonUnpack)
解析JSON字符串并提取指定的键值,支持最多5个键的提取。
- JSON字符串:接收JSON字符串作为输入
- 支持标准JSON格式
- 可以从文本文件或其他节点输出中获取
- 键值提取:支持最多5个键的提取
- 使用英文逗号分隔多个键
- 键名不区分大小写
- 如果键不存在会输出空值
- 输出类型:输出类型为 ANY,方便与其他节点对接
使用示例
-
提取单个键值:
json_string: {"name": "John", "age": 30} keys: name
输出:John
-
提取多个键值:
json_string: {"name": "John", "age": 30, "city": "New York"} keys: name, age, city
输出:John, 30, New York
注意事项
- JSON字符串必须是标准格式
- 键值提取不支持嵌套JSON对象
- 如果键不存在会输出空值
- 输出类型为 ANY,方便与其他节点对接
🐟Gemini图像分析 (Gemini)
使用Google的Gemini模型对图像进行分析和描述,支持多种模型选择和参数调整。
输入参数
-
图像 (image):需要分析的图像
- 支持ComfyUI标准图像格式
- 会自动转换为Gemini支持的格式
-
API密钥 (api_key):Google API密钥
- 需要有效的Google API密钥
- 可以从Google AI Studio获取
-
模型 (model):Gemini模型选择
- gemini-2.0-flash-exp
- gemini-1.5-flash
- gemini-1.5-flash-8b
- gemini-1.5-pro
-
prompt:引导模型分析的提示文本
- 默认值:"Describe this image"
- 可以使用自定义提示词引导分析方向
-
temperature:生成文本的随机性
- 范围:0.0-2.0
- 默认值:0.8
- 较低的值生成更确定的结果
- 较高的值生成更多样化的结果
-
max_output_tokens:生成文本的最大长度
- 范围:1-8192
- 默认值:2048
输出
- 文本描述:模型对图像的分析结果
- 输出类型:STRING
- 可以与其他文本处理节点配合使用
使用示例
-
基础图像描述:
prompt: "Describe this image in detail" temperature: 0.8 max_output_tokens: 2048
-
特定分析任务:
prompt: "List all the objects in this image" temperature: 0.3 max_output_tokens: 1024
注意事项
- 需要有效的Google API密钥
- API调用可能产生费用,请参考Google的定价政策
- 较大的图像可能需要更长的处理时间
- 建议根据具体需求调整temperature和max_output_tokens参数
🐟文件夹图片统计 (Image Count From Folder)
统计指定文件夹中的图片数量。
- 文件夹路径:需要统计的文件夹路径
- 支持绝对路径和相对路径
- 相对路径基于 ComfyUI 的根目录
输出
- 图片数量:文件夹中的图片数量
- 输出类型:INT
- 可以与其他节点对接
使用示例
- 统计指定文件夹中的所有图片:
输出:文件夹中的图片数量folder_path: /path/to/folder
注意事项
- 文件夹路径必须正确
- 如果文件夹不存在会返回0
- 支持的图片格式包括常见图片格式(jpg、png、jpeg等)
🐟文件夹加载图片 (Load Image From Folder)
从指定文件夹中批量加载图片,支持设置起始索引和加载数量。
- 文件夹路径:需要加载的文件夹路径
- 支持绝对路径和相对路径
- 相对路径基于 ComfyUI 的根目录
- 起始索引:加载图片的起始索引
- 范围:0-10000
- 默认值:0
- 加载数量:加载图片的数量
- 范围:1-100
- 默认值:1
输出
- 图片列表:加载的图片列表
- 输出类型:LIST[IMAGE]
- 可以与其他图像处理节点对接
- 图片名称:加载的图片文件名列表
- 输出类型:LIST[STRING]
- 不包含路径,仅文件名
- 图片路径:加载的图片完整路径列表
- 输出类型:LIST[STRING]
- 包含完整的文件路径
使用示例
-
加载指定文件夹中的所有图片:
folder_path: /path/to/folder start_index: 0 load_cap: 10
输出:
- images: 前10张图片的图像数据
- image_names: 前10张图片的文件名
- image_paths: 前10张图片的完整路径
-
从中间开始加载图片:
folder_path: /path/to/folder start_index: 5 load_cap: 5
输出:
- images: 第5-9张图片的图像数据
- image_names: 第5-9张图片的文件名
- image_paths: 第5-9张图片的完整路径
注意事项
- 文件夹路径必须正确
- 如果文件夹不存在会返回空列表
- 加载数量不能超过文件夹中的图片数量
- 图片按文件名排序
- 支持常见图片格式(jpg、png、jpeg等)
🐟文件保存 (File Save)
将文本内容保存到指定文件夹,支持多种文件格式。
- 文件夹路径:需要保存的文件夹路径
- 支持绝对路径和相对路径
- 相对路径基于 ComfyUI 的根目录
- 文件名:保存的文件名
- 支持多种文件格式,例如txt、csv、json等
- 文本内容:需要保存的文本内容
- 支持标准文本格式
- 可以从文本文件或其他节点输出中获取
输出
- 文件路径:保存的文件路径
- 输出类型:STRING
- 可以与其他节点对接
使用示例
- 保存文本内容到指定文件夹:
输出:保存的文件路径folder_path: /path/to/folder file_name: example.txt text_content: Hello World!
注意事项
- 文件夹路径必须正确
- 文件名必须正确
- 文本内容必须是标准格式
- 如果文件夹不存在会输出错误信息
🐟动态表达式 (Dynamic Expression)
执行动态Python表达式,支持最多5个参数。
- 表达式:需要执行的Python表达式
- 支持标准Python表达式
- 可以从文本文件或其他节点输出中获取
- 参数:表达式需要的参数
- 支持任意类型
- 支持最多5个参数
输出
- 结果:表达式执行结果
- 输出类型:ANY
- 可以与其他节点对接
使用示例
-
执行简单的加法表达式:
expression: "return arg1 + arg2" arg1: 1 arg2: 2
输出:3
-
执行复杂的字符串拼接表达式:
expression: "return f'Hello, {arg1} {arg2}!' arg1: "John" arg2: "Doe"
输出:"Hello, John Doe!"
-
执行复杂的列表操作表达式:
expression: "return [arg1, arg2, arg3]" arg1: 1 arg2: 2 arg3: 3
输出:[1, 2, 3]
-
执行复杂的字典操作表达式:
expression: "return {'a': arg1, 'b': arg2, 'c': arg3}" arg1: 1 arg2: 2 arg3: 3
输出:{'a': 1, 'b': 2, 'c': 3}
-
if-else表达式:
expression: "return 'Even' if arg1 % 2 == 0 else 'Odd'" arg1: 4
输出:"Even"
注意事项
- 表达式必须是有效的Python代码
- 参数必须与表达式中的变量名匹配
- 表达式执行结果会作为输出返回