ComfyUI Extension: ComfyUI-QHNodes

Authored by liuqianhonga

Created

Updated

2 stars

A custom node collection developed for ComfyUI, offering preset dimensions for Latent, loading LoRA from folders, and integrating multiple commonly used custom nodes.

README

ComfyUI-QHNodes

为 ComfyUI 开发的自定义节点集合,提供预设尺寸预设Latent、从文件夹加载LoRA,以及集成了多个常用的自定义节点。

所有节点均为日常所用,偏定制化,如有需要,可参考

包含节点

主仓库节点

  1. 预设尺寸 (Preset Size Latent): 提供常用的图像尺寸预设
  2. 文件夹加载LoRA (Load LoRA from Folder): 批量加载指定文件夹中的 LoRA 模型
  3. 采样器设置 (Sampler Settings): 提供采样器和调度器设置的配置节点
  4. JSON解包 (JsonUnpack): 解析JSON字符串并提取指定的键值,支持最多5个键的提取
  5. Gemini图像分析 (Gemini): 使用Google Gemini模型进行图像分析和描述
  6. 文件夹图片统计 (Image Count From Folder): 统计指定文件夹中的图片数量
  7. 文件夹加载图片 (Load Image From Folder): 从指定文件夹中批量加载图片,支持设置起始索引和加载数量
  8. 文件保存 (File Save): 将文本内容保存到指定文件夹,支持多种文件格式
  9. 动态表达式 (Dynamic Expression): 执行动态Python表达式,支持最多5个参数

集成的子模块

以下是集成的常用节点,如果不需要所有节点,可单独下载:

  1. 字符串相关节点

    • 字符串相关的自定义节点,提高在处理字符串时的效率和灵活性
    • 支持字符串列表、翻译、CSV导入导出等功能
    • 提供多种字符串选择方式:按序号选择、顺序循环、随机选择
  2. 图像压缩节点

    • 用于图像压缩的ComfyUI自定义节点,支持JPEG、WEBP、PNG压缩格式和参数调整
  3. Html2Image节点

    • 提供ComfyUI网页截图、相机水印、自由模板转图片功能节点
  4. 模型下载节点

    • 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

子模块管理(可选)

  1. 添加子模块:如果之前只安装了主仓库,现在想添加子模块
cd ComfyUI/custom_nodes/ComfyUI-QHNodes
git submodule init
git submodule update
  1. 更新子模块:如果想更新子模块到最新版本
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 文件列表,方便确认是否正确加载

使用示例

  1. 分别加载多个 LoRA(默认模式):

    model: 基础模型
    lora_folders: portraits, anime/style
    strength_model: 0.8
    merge_loras: False (默认)
    

    输出:多个模型,每个模型包含一个 LoRA

  2. 合并加载多个 LoRA:

    model: 基础模型
    lora_folders: myLoras
    strength_model: 1.0
    merge_loras: True
    

    输出:一个包含所有 LoRA 的模型

注意事项

  • 文件夹路径使用正斜杠 / 分隔
  • 目前仅支持 .safetensors 格式的 LoRA 文件
  • 如果找不到任何符合条件的文件,节点会显示"No LoRA files found"
  • 合并加载多个 LoRA 时,加载顺序与文件夹中的顺序一致
  • 每个 LoRA 都会创建模型的副本,请注意内存使用

🐟采样器设置 (Sampler Settings)

采样器和调度器配置节点。支持以下功能:

  1. 采样器设置:支持所有 ComfyUI 内置采样器
  2. 调度器设置:支持所有 ComfyUI 内置调度器
  3. 采样步数:可配置范围 1-100,默认 30 步
  4. 降噪强度:可配置范围 0.0-1.0,默认 1.0

输出参数类型为 ANY,方便与其他节点对接。

🐟JSON解包 (JsonUnpack)

解析JSON字符串并提取指定的键值,支持最多5个键的提取。

  • JSON字符串:接收JSON字符串作为输入
    • 支持标准JSON格式
    • 可以从文本文件或其他节点输出中获取
  • 键值提取:支持最多5个键的提取
    • 使用英文逗号分隔多个键
    • 键名不区分大小写
    • 如果键不存在会输出空值
  • 输出类型:输出类型为 ANY,方便与其他节点对接

使用示例

  1. 提取单个键值:

    json_string: {"name": "John", "age": 30}
    keys: name
    

    输出:John

  2. 提取多个键值:

    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
    • 可以与其他文本处理节点配合使用

使用示例

  1. 基础图像描述:

    prompt: "Describe this image in detail"
    temperature: 0.8
    max_output_tokens: 2048
    
  2. 特定分析任务:

    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
    • 可以与其他节点对接

使用示例

  1. 统计指定文件夹中的所有图片:
    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]
    • 包含完整的文件路径

使用示例

  1. 加载指定文件夹中的所有图片:

    folder_path: /path/to/folder
    start_index: 0
    load_cap: 10
    

    输出:

    • images: 前10张图片的图像数据
    • image_names: 前10张图片的文件名
    • image_paths: 前10张图片的完整路径
  2. 从中间开始加载图片:

    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
    • 可以与其他节点对接

使用示例

  1. 保存文本内容到指定文件夹:
    folder_path: /path/to/folder
    file_name: example.txt
    text_content: Hello World!
    
    输出:保存的文件路径

注意事项

  • 文件夹路径必须正确
  • 文件名必须正确
  • 文本内容必须是标准格式
  • 如果文件夹不存在会输出错误信息

🐟动态表达式 (Dynamic Expression)

执行动态Python表达式,支持最多5个参数。

  • 表达式:需要执行的Python表达式
    • 支持标准Python表达式
    • 可以从文本文件或其他节点输出中获取
  • 参数:表达式需要的参数
    • 支持任意类型
    • 支持最多5个参数

输出

  • 结果:表达式执行结果
    • 输出类型:ANY
    • 可以与其他节点对接

使用示例

  1. 执行简单的加法表达式:

    expression: "return arg1 + arg2"
    arg1: 1
    arg2: 2
    

    输出:3

  2. 执行复杂的字符串拼接表达式:

    expression: "return f'Hello, {arg1} {arg2}!'
    arg1: "John"
    arg2: "Doe"
    

    输出:"Hello, John Doe!"

  3. 执行复杂的列表操作表达式:

    expression: "return [arg1, arg2, arg3]"
    arg1: 1
    arg2: 2
    arg3: 3
    

    输出:[1, 2, 3]

  4. 执行复杂的字典操作表达式:

    expression: "return {'a': arg1, 'b': arg2, 'c': arg3}"
    arg1: 1
    arg2: 2
    arg3: 3
    

    输出:{'a': 1, 'b': 2, 'c': 3}

  5. if-else表达式:

    expression: "return 'Even' if arg1 % 2 == 0 else 'Odd'"
    arg1: 4
    

    输出:"Even"

注意事项

  • 表达式必须是有效的Python代码
  • 参数必须与表达式中的变量名匹配
  • 表达式执行结果会作为输出返回