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/셸을 열고 다음을 수행합니다.
/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 소프트 엣지 라인 | 헤드 | control_v11p_sd15_softedge 제어_헤드 |
표준 선화 | 표준_선형 | control_v11p_sd15_lineart |
현실적인 선화 | 선화(또는 coarse 활성화된 경우 lineart_coarse ) | control_v11p_sd15_lineart |
애니메이션 선화 | Lineart_anime | control_v11p_sd15s2_lineart_anime |
만화 선화 | Lineart_anime_denoise | control_v11p_sd15s2_lineart_anime |
M-LSD 라인 | mlsd | 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 소프트 엣지 라인 | 티드 | controlnet-sd-xl-1.0-softedge-dexined control_v11p_sd15_softedge (이론적으로) |
PiDiNet 라인 낙서 | scribble_pidinet | control_v11p_sd15_scribble control_scribble |
AnyLine 선화 | mistoLine_fp16.safetensors mistoLine_rank256 control_v11p_sd15s2_lineart_anime control_v11p_sd15_lineart |
전처리기 노드 | sd-webui-controlnet/기타 | ControlNet/T2I-어댑터 |
---|---|---|
MiDaS 깊이 지도 | (보통) 깊이 | control_v11f1p_sd15_깊이 제어_깊이 t2iadapter_깊이 |
LeReS 깊이 맵 | 깊이_레레스 | control_v11f1p_sd15_깊이 제어_깊이 t2iadapter_깊이 |
조이 깊이 지도 | 깊이_조 | control_v11f1p_sd15_깊이 제어_깊이 t2iadapter_깊이 |
MiDaS 노멀맵 | 노멀_맵 | 제어_정상 |
BAE 노멀 맵 | 노멀_배 | control_v11p_sd15_normalbae |
MeshGraphormer 핸드 리파이너(HandRefinder) | 깊이_손_정련기 | control_sd15_inpaint_length_hand_fp16 |
무엇이든 깊이 | 깊이_아무거나 | 깊이 - 무엇이든 |
조이 뎁스 무엇이든 (기본적으로 Zoe이지만 인코더는 DepthAnything으로 대체됨) | 깊이_아무거나 | 깊이 - 무엇이든 |
일반 DSINE | control_normal/control_v11p_sd15_normalbae | |
미터법3D 깊이 | control_v11f1p_sd15_깊이 제어_깊이 t2iadapter_깊이 | |
미터법3D 법선 | control_v11p_sd15_normalbae | |
깊이 무엇이든 V2 | 깊이 - 무엇이든 |
전처리기 노드 | sd-webui-controlnet/기타 | ControlNet/T2I-어댑터 |
---|---|---|
DW 포즈 추정기 | dw_openpose_full | control_v11p_sd15_openpose control_openpose t2iadapter_openpose |
OpenPose 추정기 | 개방형(Detect_body) openpose_hand (Detect_body + detector_hand) openpose_faceonly (Detect_face) openpose_full (감지_손 + 감지_몸 + 감지_얼굴) | control_v11p_sd15_openpose control_openpose t2iadapter_openpose |
MediaPipe 페이스 메쉬 | 미디어파이프_얼굴 | controlnet_sd21_laion_face_v2 |
동물 추정기 | 동물_열린 자세 | control_sd15_animal_openpose_fp16 |
전처리기 노드 | sd-webui-controlnet/기타 | ControlNet/T2I-어댑터 |
---|---|---|
유니매치 옵티컬 플로우 | 드래그NUWA |
이 워크플로는 이미지를 ComfyUI의 출력 폴더(출력 이미지와 동일한 위치)에 저장합니다. Save Pose Keypoints
노드를 찾지 못한 경우 이 확장을 업데이트하세요.
IMAGE 배치의 각 프레임에 해당하는 OpenPose 형식 JSON 배열은 UI 또는 /history
API 엔드포인트의 app.nodeOutputs
사용하여 DWPose 및 OpenPose에서 가져올 수 있습니다. 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 (poseNodes의 constposeNode) { const openposeResults = JSON.parse( app.nodeOutputs[poseNode.id].openpose_json[0]) console.log(openposeResults) //각 프레임에 대한 Openpose JSON을 포함하는 배열}
API 사용자의 경우: 자바스크립트
import fetch from "node-fetch" //"type": "module"을 "package.json"에 추가하는 것을 기억하세요. async function main() { const 프롬프트Id = '792c1905-ecfe-41f4-8114-83e6a4a09a9f' //너무 게으르다 POST /queue let History = wait 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): with urllib.request.urlopen("http://{}/history/{}" .format(server_address, Prompt_id)) 응답으로: return json.loads(response.read())history = get_history(prompt_id)[prompt_id]for o in History['outputs']: for node_id in History['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 세그먼트 | oneformer_코코 | 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 |
이미지 강도 | 다시 칠하기_강도 | 나도 몰라. 아마도 위와 같겠죠? |
천 마디 말보다 한 장의 사진이 더 중요하다
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
설정하십시오. 입력 이미지가 이상적인 경우 bbox 감지 시간을 줄이기 위해 .torchscript.pt
로 끝나는 다른 bbox 감지기를 사용해 볼 수 있습니다.
onnxruntime이 성공적으로 설치되고 체크포인트가 .onnx
로 끝나는 경우 GPU를 활용하기 위해 기본 cv2 백엔드를 대체합니다. NVidia 카드를 사용하는 경우 onnxruntime을 직접 컴파일하지 않는 한 이 방법은 현재 CUDA 11.8(ComfyUI_windows_portable_nvidia_cu118_or_cpu.7z)에서만 작동할 수 있습니다.
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
Densepose: 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, 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
헤드: 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
Depth_anything: LiheYoung/Depth-Anything/checkpoints/깊이_anything_vitl14.pth, LiheYoung/Depth-Anything/checkpoints/깊이_anything_vitb14.pth 또는 LiheYoung/Depth-Anything/checkpoints/깊이_anything_vits14.pth 중 하나
확산_에지: hr16/Diffusion-Edge/diffusion_edge_indoor.pt, hr16/Diffusion-Edge/diffusion_edge_urban.pt 또는 hr16/Diffusion-Edge/diffusion_edge_natrual.pt
unmatch: 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_깊이/깊이_anything_metric_깊이_indoor.pt 또는 LiheYoung/Depth-Anything/checkpoints_metric_깊이/깊이_anything_metric_깊이_outdoor.pt 중 하나
여러분의 지원에 감사드립니다. 별에 대한 그래프가 선형일 것이라고는 전혀 생각하지 못했습니다.