用于制作 ControlNet 提示图像的即插即用 ComfyUI 节点集
Flux.1 Dev 上的“动漫风格,街头抗议,赛博朋克城市,一名粉红色头发和金色眼睛的女子(看着观众)举着一块牌子,上面写着粗体霓虹粉色文字“ComfyUI ControlNet Aux”。
该代码是从 https://github.com/lllyasviel/ControlNet/tree/main/annotator 中的相应文件夹复制粘贴的,并连接到 ?中心。
所有功劳和版权均归 https://github.com/lllyasviel 所有。
前往更新页面关注更新
安装 ComfyUI Manager 并执行此处介绍的步骤来安装此存储库。
如果您在 Linux 上运行,或者在 Windows 上使用非管理员帐户,您需要确保/ComfyUI/custom_nodes
和comfyui_controlnet_aux
具有写入权限。
现在有一个install.bat,如果检测到,您可以运行它来安装到便携式设备。否则,它将默认为系统并假设您遵循ConfyUI的手动安装步骤。
如果您无法运行install.bat (例如您是Linux 用户)。打开 CMD/Shell 并执行以下操作:
导航到您的/ComfyUI/custom_nodes/
文件夹
运行git clone https://github.com/Fannovel16/comfyui_controlnet_aux/
导航到您的comfyui_controlnet_aux
文件夹
运行pip install -r requirements.txt
运行path/to/ComfUI/python_embeded/python.exe -s -m pip install -r requirements.txt
便携式/venv:
与系统Python
启动ComfyUI
请注意,此存储库仅支持预处理器制作提示图像(例如,stickman、canny edge 等)。除 Inpaint 之外的所有预处理器都集成到AIO Aux Preprocessor
节点中。该节点允许您快速获取预处理器,但无法设置预处理器自身的阈值参数。您需要直接使用其节点来设置阈值。
预处理器节点 | sd-webui-controlnet/其他 | ControlNet/T2I 适配器 |
---|---|---|
二元线 | 二进制 | 控制涂鸦 |
精明的边缘 | 精明的 | control_v11p_sd15_canny 控制精明 t2iadapter_canny |
HED 软边线 | 赫德 | control_v11p_sd15_softedge 控制_hed |
标准艺术线条 | 标准线性图 | control_v11p_sd15_ Lineart |
写实艺术线条 | Lineart(如果启用了coarse ,则为lineart_coarse ) | control_v11p_sd15_ Lineart |
动漫艺术线条 | 线性动画 | control_v11p_sd15s2_lineart_anime |
漫画艺术线条 | 线性动画降噪 | control_v11p_sd15s2_lineart_anime |
M-LSD 线 | 最小二乘法 | 控制_v11p_sd15_mlsd 控制_mlsd |
PiDiNet 软边线 | 皮迪内特 | control_v11p_sd15_softedge 控制涂鸦 |
涂鸦线 | 涂 | control_v11p_sd15_scribble 控制涂鸦 |
涂鸦 XDoG 线 | 涂鸦_xdog | control_v11p_sd15_scribble 控制涂鸦 |
假涂鸦线 | 涂鸦_hed | control_v11p_sd15_scribble 控制涂鸦 |
TEED 软边线 | 特德 | controlnet-sd-xl-1.0-softedge-dexined control_v11p_sd15_softedge(理论上) |
涂鸦 PiDiNet 线条 | 涂鸦_pidinet | control_v11p_sd15_scribble 控制涂鸦 |
任意线艺术线条 | MistoLine_fp16.safetensors MistoLine_rank256 control_v11p_sd15s2_lineart_anime control_v11p_sd15_ Lineart |
预处理器节点 | sd-webui-controlnet/其他 | ControlNet/T2I 适配器 |
---|---|---|
MiDaS 深度图 | (正常)深度 | control_v11f1p_sd15_深度 控制深度 t2ia适配器深度 |
LeReS深度图 | 深度_leres | control_v11f1p_sd15_深度 控制深度 t2ia适配器深度 |
佐伊深度图 | 深度佐伊 | control_v11f1p_sd15_深度 控制深度 t2ia适配器深度 |
MiDaS 法线贴图 | 法线贴图 | 控制正常 |
BAE 法线贴图 | 正常_bae | control_v11p_sd15_normalbae |
MeshGraphormer 手工精炼器 (HandRefinder) | 深度手精炼器 | control_sd15_inpaint_depth_hand_fp16 |
深度任何东西 | 深度_任何东西 | 深度-任何东西 |
佐伊深度任何东西 (基本上是 Zoe,但编码器被 DepthAnything 取代) | 深度_任何东西 | 深度-任何东西 |
正常DSINE | 控制_正常/控制_v11p_sd15_normalbae | |
公制三维深度 | control_v11f1p_sd15_深度 控制深度 t2ia适配器深度 | |
Metric3D 法线 | control_v11p_sd15_normalbae | |
深度任意 V2 | 深度-任何东西 |
预处理器节点 | sd-webui-controlnet/其他 | ControlNet/T2I 适配器 |
---|---|---|
DWPose 估计器 | dw_openpose_full | control_v11p_sd15_openpose 控制开放姿势 t2iaadapter_openpose |
OpenPose 估计器 | 开放姿势(检测身体) openpose_hand(检测身体+检测手) openpose_faceonly(检测脸部) openpose_full(检测手+检测身体+检测脸部) | control_v11p_sd15_openpose 控制开放姿势 t2iaadapter_openpose |
MediaPipe 面网格 | 媒体管道面 | controlnet_sd21_laion_face_v2 |
动物估算器 | 动物_开放姿势 | control_sd15_animal_openpose_fp16 |
预处理器节点 | sd-webui-controlnet/其他 | ControlNet/T2I 适配器 |
---|---|---|
统一光流 | 德拉努瓦 |
此工作流程会将图像保存到 ComfyUI 的输出文件夹(与输出图像相同的位置)。如果您还没有找到Save Pose Keypoints
节点,请更新此扩展
可以使用 UI 或/history
API 端点上的app.nodeOutputs
从 DWPose 和 OpenPose 获取与 IMAGE 批次中的每个帧对应的 OpenPose 格式 JSON 数组。 AnimalPose 的 JSON 输出使用与 OpenPose JSON 类似的格式:
[ { "version": "ap10k", "animals": [ [[x1, y1, 1], [x2, y2, 1],..., [x17, y17, 1]], [[x1, y1, 1], [x2, y2, 1],..., [x17, y17, 1]], ... ], "canvas_height": 512, "canvas_width": 768 }, ... ]
对于扩展开发人员(例如 Openpose 编辑器):
constposeNodes = app.graph._nodes.filter(node => ["OpenposePreprocessor", "DWPreprocessor", "AnimalPosePreprocessor"].includes(node.type))for (constposeNode ofposeNodes) { const openposeResults = JSON.parse( app.nodeOutputs[poseNode.id].openpose_json[0]) console.log(openposeResults) //包含 Openpose JSON 的数组每帧}
对于 API 用户:Javascript
import fetch from "node-fetch" //记得添加 "type": "module" 到 "package.json"async function main() { const PromptId = '792c1905-ecfe-41f4-8114-83e6a4a09a9f' //太懒了POST /queue 让历史记录=等待fetch(`http://127.0.0.1:8188/history/${promptId}`).then(re => re.json()) 历史 = 历史[promptId] const nodeOutputs = Object.values(history.outputs) .filter(output => output.openpose_json) for (nodeOutputs 的 const nodeOutput) { const openposeResults = JSON.parse(nodeOutput.openpose_json[0]) console.log(openposeResults) //每帧包含 Openpose JSON 的数组 }}main()
Python
import json, urllib.requestserver_address = "127.0.0.1:8188"prompt_id = '' #懒得POST /queuedef get_history(prompt_id): with urllib.request.urlopen("http://{}/history/{}" .format(server_address,prompt_id)) 作为响应:返回 json.loads(response.read())history = get_history(prompt_id)[prompt_id]for o inhistory['outputs']: for node_id inhistory['outputs']: node_output =history['outputs'][node_id] if 'openpose_json' in node_output: print(json. loads(node_output['openpose_json'][0])) #每帧包含 Openpose JSON 的列表
预处理器节点 | sd-webui-controlnet/其他 | ControlNet/T2I 适配器 |
---|---|---|
OneFormer ADE20K 分段器 | oneformer_ade20k | control_v11p_sd15_seg |
OneFormer COCO Segmentor | oneformer_coco | control_v11p_sd15_seg |
UniFormer 分段器 | 分割 | 控制_sd15_seg control_v11p_sd15_seg |
预处理器节点 | sd-webui-controlnet/其他 | ControlNet/T2I 适配器 |
---|---|---|
调色板 | 颜色 | t2iaadapter_color |
内容随机播放 | 随机播放 | t2iaadapter_style |
预处理器节点 | sd-webui-controlnet/其他 | ControlNet/T2I 适配器 |
---|---|---|
图像亮度 | 重新着色亮度 | ioclab_sd15_recolor sai_xl_recolor_256lora bdsqlsz_controlllite_xl_recolor_luminance |
图像强度 | 重新着色强度 | 我不知道。也许和上面一样? |
一张图胜过一千个字
https://github.com/Fannovel16/comfyui_controlnet_aux/blob/main/examples/ExecuteAll.png 输入图像:https://github.com/Fannovel16/comfyui_controlnet_aux/blob/main/examples/comfyui-controlnet-aux-logo。 PNG
这个仓库有一个新的机制,它将跳过任何无法导入的自定义节点。如果您遇到这种情况,请使用命令行日志在问题选项卡上创建问题。
有两种方法可以加速 DWPose:使用 TorchScript 检查点 (.torchscript.pt) 检查点或 ONNXRuntime (.onnx)。 TorchScript 方式比 ONNXRuntime 慢一点,但不需要任何额外的库,并且仍然比 CPU 快得多。
torchscript bbox 检测器与 onnx 位姿估计器兼容,反之亦然。
根据这张图设置bbox_detector
和pose_estimator
。如果输入图像理想,您可以尝试其他以.torchscript.pt
结尾的 bbox 检测器,以减少 bbox 检测时间。
如果 onnxruntime 安装成功并且检查点使用以.onnx
结尾,它将替换默认的 cv2 后端以利用 GPU。请注意,如果您使用的是 NVidia 卡,此方法目前仅适用于 CUDA 11.8 (ComfyUI_windows_portable_nvidia_cu118_or_cpu.7z),除非您自己编译 onnxruntime。
了解您的 onnxruntime 构建:
NVidia CUDA 11.x 或以下/AMD GPU: onnxruntime-gpu
NVidia CUDA 12.x: onnxruntime-gpu --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-12/pypi/simple/
DirectML: onnxruntime-directml
OpenVINO: onnxruntime-openvino
请注意,如果这是您第一次使用 ComfyUI,请在执行后续步骤之前测试它是否可以在您的设备上运行。
将其添加到requirements.txt
中
运行安装中提到的install.bat
或 pip 命令
Anime_face_segment:bdsqlsz/qinglong_controlnet-lllite/Annotators/UNet.pth,anime-seg/isnetis.ckpt
密集姿势:LayerNorm/DensePose-TorchScript-with-hint-image/densepose_r50_fpn_dl.torchscript
dw姿势:
bbox_Detector:yzd-v/DWPose/yolox_l.onnx、hr16/yolox-onnx/yolox_l.torchscript.pt、hr16/yolo-nas-fp16/yolo_nas_l_fp16.onnx、hr16/yolo-nas-fp16/yolo_nas_m_fp16.onnx、 hr16/yolo-nas-fp16/yolo_nas_s_fp16.onnx
pose_estimator:hr16/DWPose-TorchScript-BatchSize5/dw-ll_ucoco_384_bs5.torchscript.pt、yzd-v/DWPose/dw-ll_ucoco_384.onnx
动物姿势(ap10k):
bbox_Detector:yzd-v/DWPose/yolox_l.onnx、hr16/yolox-onnx/yolox_l.torchscript.pt、hr16/yolo-nas-fp16/yolo_nas_l_fp16.onnx、hr16/yolo-nas-fp16/yolo_nas_m_fp16.onnx、 hr16/yolo-nas-fp16/yolo_nas_s_fp16.onnx
pose_estimator:hr16/DWPose-TorchScript-BatchSize5/rtmpose-m_ap10k_256_bs5.torchscript.pt、hr16/UnJIT-DWPose/rtmpose-m_ap10k_256.onnx
hed:lllyasviel/Annotators/ControlNetHED.pth
位置: lllyasviel/Annotators/res101.pth, lllyasviel/Annotators/latest_net_G.pth
线稿:lllyasviel/Annotators/sk_model.pth、lllyasviel/Annotators/sk_model2.pth
Lineart_anime:lllyasviel/Annotators/netG.pth
manga_line:lllyasviel/Annotators/erika.pth
mesh_graphormer:hr16/ControlNet-HandRefiner-pruned/graphormer_hand_state_dict.bin,hr16/ControlNet-HandRefiner-pruned/hrnetv2_w64_imagenet_pretrained.pth
迈达斯:lllyasviel/Annotators/dpt_hybrid-midas-501f0c75.pt
mlsd:lllyasviel/Annotators/mlsd_large_512_fp32.pth
正常库:lllyasviel/Annotators/scannet.pt
oneformer:lllyasviel/Annotators/250_16_swin_l_oneformer_ade20k_160k.pth
open_pose:lllyasviel/Annotators/body_pose_model.pth、lllyasviel/Annotators/hand_pose_model.pth、lllyasviel/Annotators/facenet.pth
pidi:lllyasviel/Annotators/table5_pidinet.pth
萨姆:dhkim2810/MobileSAM/mobile_sam.pt
制服师:lllyasviel/Annotators/upernet_global_small.pth
佐伊:lllyasviel/Annotators/ZoeD_M12_N.pt
发条:bdsqlsz/qinglong_controlnet-lllite/7_model.pth
height_anything:LiheYoung/Depth-Anything/checkpoints/depth_anything_vitl14.pth、LiheYoung/Depth-Anything/checkpoints/depth_anything_vitb14.pth 或 LiheYoung/Depth-Anything/checkpoints/depth_anything_vits14.pth
扩散_边缘: hr16/Diffusion-Edge/diffusion_edge_indoor.pt、hr16/Diffusion-Edge/diffusion_edge_urban.pt 或 hr16/Diffusion-Edge/diffusion_edge_natrual.pt
unimatch:hr16/Unimatch/gmflow-scale2-regrefine6-mixdata.pth、hr16/Unimatch/gmflow-scale2-mixdata.pth 或 hr16/Unimatch/gmflow-scale1-mixdata.pth
zoe_depth_anything:LiheYoung/Depth-Anything/checkpoints_metric_depth/depth_anything_metric_depth_indoor.pt 或 LiheYoung/Depth-Anything/checkpoints_metric_depth/depth_anything_metric_depth_outdoor.pt
感谢各位的支持。我从没想过星星的图表会是线性的哈哈。