Готовые к использованию наборы узлов ComfyUI для создания изображений подсказок ControlNet
«стиль аниме, протест на улице, город киберпанк, женщина с розовыми волосами и золотыми глазами (смотрит на зрителя) держит табличку с текстом «ComfyUI ControlNet Aux», выделенным жирным неоновым розовым шрифтом» на Flux.1 Dev
Код копируется из соответствующих папок в 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
Портативный/венв:
С системным питоном
Запустить ComfyUI
Обратите внимание, что этот репозиторий поддерживает только препроцессоры, создающие изображения-подсказки (например, Stickman, Canny Edge и т. д.). Все препроцессоры, кроме Inpaint, интегрированы в узел AIO Aux Preprocessor
. Этот узел позволяет быстро получить препроцессор, но собственные пороговые параметры препроцессора установить невозможно. Вам необходимо использовать его узел напрямую для установки пороговых значений.
Узел препроцессора | sd-webui-controlnet/другое | Адаптер ControlNet/T2I |
---|---|---|
Бинарные линии | двоичный | control_scribble |
Кэнни Эдж | хитрый | control_v11p_sd15_canny control_canny t2iadapter_canny |
Линии HED Soft-Edge | Хед | control_v11p_sd15_softedge control_hed |
Стандартный линейный рисунок | Standard_lineart | control_v11p_sd15_lineart |
Реалистичная Линия | Lineart (или lineart_coarse если включена coarse настройка) | control_v11p_sd15_lineart |
Аниме линейное искусство | Lineart_anime | control_v11p_sd15s2_lineart_anime |
Манга Линейное искусство | Lineart_anime_denoise | control_v11p_sd15s2_lineart_anime |
Линии М-ЛСД | млсд | control_v11p_sd15_mlsd control_mlsd |
Линии PiDiNet с мягкими краями | пидинет | control_v11p_sd15_softedge control_scribble |
Наброски линий | каракули | control_v11p_sd15_scribble control_scribble |
Написание строк XDoG | scribble_xdog | control_v11p_sd15_scribble control_scribble |
Поддельные каракули | scribble_hed | control_v11p_sd15_scribble control_scribble |
Линии TEED Soft Edge | футболка | controlnet-sd-xl-1.0-softedge-dexined control_v11p_sd15_softedge (теоретически) |
Написание линий PiDiNet | scribble_pidinet | control_v11p_sd15_scribble control_scribble |
AnyLine Lineart | mistoLine_fp16.safetensors mistoLine_rank256 control_v11p_sd15s2_lineart_anime control_v11p_sd15_lineart |
Узел препроцессора | sd-webui-controlnet/другое | Адаптер ControlNet/T2I |
---|---|---|
Карта глубины МиДаС | (нормальная) глубина | control_v11f1p_sd15_глубина control_глубина t2iadapter_глубина |
Карта глубины ЛеРеС | глубина_лерес | control_v11f1p_sd15_глубина control_глубина t2iadapter_глубина |
Карта глубины Зои | глубина_zoe | control_v11f1p_sd15_глубина control_глубина t2iadapter_глубина |
Карта нормалей MiDaS | нормальная_карта | control_normal |
Карта нормалей BAE | нормальный_bae | control_v11p_sd15_normalbae |
MeshGraphormer Ручной рафинер (HandRefinder) | deep_hand_refiner | control_sd15_inpaint_length_hand_fp16 |
Глубина | глубина_что-нибудь | Глубина-что угодно |
Зои Глубина (В основном Zoe, но кодировщик заменен на DepthAnything) | глубина_что-нибудь | Глубина-что угодно |
Нормальный DSINE | control_normal/control_v11p_sd15_normalbae | |
Метрика3D Глубина | control_v11f1p_sd15_глубина control_глубина t2iadapter_глубина | |
Метрика3D Нормальный | control_v11p_sd15_normalbae | |
Глубина Что угодно V2 | Глубина-что угодно |
Узел препроцессора | sd-webui-controlnet/другое | Адаптер ControlNet/T2I |
---|---|---|
Оценщик DWPose | dw_openpose_full | control_v11p_sd15_openpose control_openpose t2iadapter_openpose |
Оценщик OpenPose | openpose (detect_body) openpose_hand (обнаружить_тело + обнаружить_руку) openpose_faceonly (обнаружить_лицо) openpose_full (обнаружение_руки + обнаружение_тела + обнаружение_лица) | control_v11p_sd15_openpose control_openpose t2iadapter_openpose |
Сетка для лица MediaPipe | mediapipe_face | controlnet_sd21_laion_face_v2 |
Оценщик животных | животное_открытая поза | control_sd15_animal_openpose_fp16 |
Узел препроцессора | sd-webui-controlnet/другое | Адаптер ControlNet/T2I |
---|---|---|
Оптический поток Unimatch | ПеретащитеNUWA |
Этот рабочий процесс сохранит изображения в выходной папке ComfyUI (там же, где и выходные изображения). Если вы не нашли узел Save Pose Keypoints
, обновите это расширение.
Массив JSON в формате OpenPose, соответствующий каждому кадру в пакете IMAGE, можно получить из DWPose и OpenPose с помощью app.nodeOutputs
в конечной точке API пользовательского интерфейса или /history
. Вывод JSON из AnimalPose использует формат, аналогичный 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 let History = await fetch(`http://127.0.0.1:8188/history/${promptId}`).then(re => re.json()) History = History[promptId] const nodeOutputs = Object.values(history.outputs).filter(output => output.openpose_json) for (const nodeOutput of nodeOutputs) { const openposeResults = JSON.parse(nodeOutput.openpose_json[0]) console.log(openposeResults) //Массив содержащий Openpose JSON для каждого кадра }}main()
Питон
import json, urllib.requestserver_address = "127.0.0.1:8188"prompt_id = '' #Слишком лень выполнять POST /queuedef get_history(prompt_id): с urllib.request.urlopen("http://{}/history/{}" .format(server_address, Prompt_id)) в качестве ответа: return json.loads(response.read())history = get_history(prompt_id)[prompt_id]для o в истории['outputs']: для node_id в истории['outputs'] : node_output = History['outputs'][node_id] if 'openpose_json' в node_output: print(json.loads(node_output['openpose_json'][0])) #Список, содержащий Openpose JSON для каждого кадра
Узел препроцессора | sd-webui-controlnet/другое | Адаптер ControlNet/T2I |
---|---|---|
OneБывший сегментатор ADE20K | oneformer_ade20k | control_v11p_sd15_seg |
OneБывший сегментатор COCO | oneformer_coco | control_v11p_sd15_seg |
UniFormer Сегментатор | сегментация | control_sd15_seg control_v11p_sd15_seg |
Узел препроцессора | sd-webui-controlnet/другое | Адаптер ControlNet/T2I |
---|---|---|
Цветовая палитра | цвет | t2iadapter_color |
Перетасовка контента | перетасовать | t2iadapter_style |
Узел препроцессора | sd-webui-controlnet/другое | Адаптер ControlNet/T2I |
---|---|---|
Яркость изображения | recolor_luminance | ioclab_sd15_recolor sai_xl_recolor_256lora bdsqlsz_controlllite_xl_recolor_luminance |
Интенсивность изображения | recolor_intensity | Я не знаю. Может быть, то же самое, что и выше? |
Картинка стоит тысячи слов
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, но не требует какой-либо дополнительной библиотеки и все же намного быстрее, чем процессор.
Детектор torchscript bbox совместим с оценщиком позы onnx и наоборот.
Установите bbox_detector
pose_estimator
согласно этой картинке. Вы можете попробовать другие окончания детектора bbox с .torchscript.pt
, чтобы сократить время обнаружения bbox, если входные изображения идеальны.
Если onnxruntime установлен успешно и контрольная точка заканчивается на .onnx
, она заменит бэкэнд cv2 по умолчанию, чтобы воспользоваться преимуществами графического процессора. Обратите внимание: если вы используете карту NVidia, этот метод в настоящее время может работать только с CUDA 11.8 (ComfyUI_windows_portable_nvidia_cu118_or_cpu.7z), если вы не скомпилируете onnxruntime самостоятельно.
Узнайте свою сборку onnxruntime:
NVidia CUDA 11.x или графический процессор ниже/AMD: 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, упомянутую в разделе «Установка».
аниме_фейс_сегмент: bdsqlsz/qinglong_controlnet-lllite/Annotators/UNet.pth, аниме-seg/isnetis.ckpt
плотная поза: LayerNorm/DensePose-TorchScript-with-hint-image/densepose_r50_fpn_dl.torchscript
dwpose:
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, 6 /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
Animal_pose (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, 6 /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
хед: 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
Midas: lllyasviel/Annotators/dpt_hybrid-midas-501f0c75.pt
mlsd: lllyasviel/Annotators/mlsd_large_512_fp32.pth
Normalbae: 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
deep_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
Diffusion_edge: либо 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_length_anything: Либо LiheYoung/Depth-Anything/checkpoints_metric_length/Depth_anything_metric_length_indoor.pt, либо LiheYoung/Depth-Anything/checkpoints_metric_Deep/Depth_anything_metric_Deep_outdoor.pt
Спасибо за поддержку. Я никогда не думал, что график звезд будет линейным, лол.