Kumpulan simpul ComfyUI plug-and-play untuk membuat gambar petunjuk ControlNet
"gaya anime, protes di jalan, kota cyberpunk, seorang wanita dengan rambut merah muda dan mata emas (memandang ke penonton) memegang tanda dengan teks "ComfyUI ControlNet Aux" dalam huruf tebal, merah muda neon" di Flux.1 Dev
Kode disalin-tempel dari masing-masing folder di https://github.com/lllyasviel/ControlNet/tree/main/annotator dan dihubungkan ke ? Pusat.
Semua kredit & hak cipta diberikan ke https://github.com/lllyasviel.
Buka halaman Pembaruan untuk mengikuti pembaruan
Instal ComfyUI Manager dan lakukan langkah-langkah yang diperkenalkan di sana untuk menginstal repo ini.
Jika Anda menggunakan Linux, atau akun non-admin di windows, Anda sebaiknya memastikan /ComfyUI/custom_nodes
dan comfyui_controlnet_aux
memiliki izin menulis.
Sekarang ada install.bat yang dapat Anda jalankan untuk menginstal ke portable jika terdeteksi. Jika tidak maka akan default ke sistem dan menganggap Anda mengikuti langkah-langkah instalasi manual ConfyUI.
Jika Anda tidak dapat menjalankan install.bat (misalnya Anda pengguna Linux). Buka CMD/Shell dan lakukan hal berikut:
Navigasikan ke folder /ComfyUI/custom_nodes/
Anda
Jalankan git clone https://github.com/Fannovel16/comfyui_controlnet_aux/
Arahkan ke folder comfyui_controlnet_aux
Anda
Jalankan pip install -r requirements.txt
Jalankan path/to/ComfUI/python_embeded/python.exe -s -m pip install -r requirements.txt
Portabel/venv:
Dengan sistem python
Mulai ComfyUI
Harap dicatat bahwa repo ini hanya mendukung praprosesor yang membuat gambar petunjuk (misalnya stickman, canny edge, dll). Semua praprosesor kecuali Inpaint diintegrasikan ke dalam node AIO Aux Preprocessor
. Node ini memungkinkan Anda mendapatkan praprosesor dengan cepat tetapi parameter ambang batas praprosesor sendiri tidak akan dapat disetel. Anda perlu menggunakan simpulnya secara langsung untuk menetapkan ambang batas.
Node Praprosesor | sd-webui-controlnet/lainnya | ControlNet/Adaptor T2I |
---|---|---|
Garis Biner | biner | kontrol_coretan |
Tepi Cerdik | cerdik | control_v11p_sd15_canny kontrol_cerdik t2iadapter_canny |
Garis Tepi Lembut HED | kandang | control_v11p_sd15_softedge kontrol_hed |
Lineart Standar | standar_lineart | control_v11p_sd15_lineart |
Lineart Realistis | lineart tersebut (atau lineart_coarse jika coarse diaktifkan) | control_v11p_sd15_lineart |
Garis Anime | lineart_anime | control_v11p_sd15s2_lineart_anime |
Garis Manga Manga | lineart_anime_denoise | control_v11p_sd15s2_lineart_anime |
Garis M-LSD | mlsd | kontrol_v11p_sd15_mlsd kontrol_mlsd |
Garis Tepi Lembut PiDiNet | pidinet | control_v11p_sd15_softedge kontrol_coretan |
Garis Coretan | tulisan cakar ayam | control_v11p_sd15_coretan kontrol_coretan |
Coret Garis XDoG | coretan_xdog | control_v11p_sd15_coretan kontrol_coretan |
Garis Coretan Palsu | coretan_hed | control_v11p_sd15_coretan kontrol_coretan |
Garis Tepi Lembut TEED | teed | controlnet-sd-xl-1.0-softedge-dexined control_v11p_sd15_softedge (Secara teoritis) |
Coret Garis PiDiNet | coretan_pidnet | control_v11p_sd15_coretan kontrol_coretan |
Garis Linier AnyLine | mistoLine_fp16.safetensors mistoLine_rank256 control_v11p_sd15s2_lineart_anime control_v11p_sd15_lineart |
Node Praprosesor | sd-webui-controlnet/lainnya | ControlNet/Adaptor T2I |
---|---|---|
Peta Kedalaman MiDaS | kedalaman (normal). | control_v11f1p_sd15_kedalaman kontrol_kedalaman t2iadapter_kedalaman |
Peta Kedalaman LeReS | kedalaman_leres | control_v11f1p_sd15_kedalaman kontrol_kedalaman t2iadapter_kedalaman |
Peta Kedalaman Zoe | kedalaman_zoe | control_v11f1p_sd15_kedalaman kontrol_kedalaman t2iadapter_kedalaman |
Peta Normal MiDaS | peta_normal | kontrol_normal |
Peta Normal BAE | normal_bae | control_v11p_sd15_normalbae |
Pemurni Tangan MeshGraphormer (HandRefinder) | depth_hand_refiner | control_sd15_inpaint_kedalaman_tangan_fp16 |
Kedalaman Apapun | kedalaman_apa saja | Kedalaman-Apa Saja |
Zoe Kedalaman Apa Pun (Pada dasarnya Zoe tetapi encodernya diganti dengan DepthAnything) | kedalaman_apa saja | Kedalaman-Apa Saja |
DSIN biasa | control_normal/control_v11p_sd15_normalbae | |
Kedalaman Metrik3D | control_v11f1p_sd15_kedalaman kontrol_kedalaman t2iadapter_kedalaman | |
Metrik3D Normal | control_v11p_sd15_normalbae | |
Kedalaman Apapun V2 | Kedalaman-Apa Saja |
Node Praprosesor | sd-webui-controlnet/lainnya | ControlNet/Adaptor T2I |
---|---|---|
Penaksir DWPose | dw_openpose_full | control_v11p_sd15_openpose kontrol_openpose t2iadapter_openpose |
Penaksir OpenPose | posisi terbuka (deteksi_tubuh) openpose_hand (deteksi_tubuh + deteksi_tangan) openpose_faceonly (deteksi_wajah) openpose_full (deteksi_tangan + deteksi_tubuh + deteksi_wajah) | control_v11p_sd15_openpose kontrol_openpose t2iadapter_openpose |
Jaring Wajah MediaPipe | mediapipe_face | controlnet_sd21_laion_face_v2 |
Penaksir Hewan | animal_openpose | control_sd15_animal_openpose_fp16 |
Node Praprosesor | sd-webui-controlnet/lainnya | ControlNet/Adaptor T2I |
---|---|---|
Aliran Optik Unimatch | TarikNUWA |
Alur kerja ini akan menyimpan gambar ke folder keluaran ComfyUI (lokasi yang sama dengan gambar keluaran). Jika Anda belum menemukan simpul Save Pose Keypoints
, perbarui ekstensi ini
Array JSON format OpenPose yang sesuai dengan setiap frame dalam kumpulan IMAGE dapat diperoleh dari DWPose dan OpenPose menggunakan app.nodeOutputs
di titik akhir UI atau /history
API. Output JSON dari AnimalPose menggunakan format yang mirip dengan 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 }, ... ]
Untuk pengembang ekstensi (misalnya editor Openpose):
const poseNodes = app.graph._nodes.filter(node => ["OpenposePreprocessor", "DWPreprocessor", "AnimalPosePreprocessor"].includes(node.type))for (const poseNode dari poseNodes) { const openposeResults = JSON.parse( app.nodeOutputs[poseNode.id].openpose_json[0]) console.log(openposeResults) //Array yang berisi Openpose JSON untuk setiap frame}
Untuk pengguna API: Javascript
import ambil dari "node-fetch" //Ingat untuk menambahkan "type": "module" ke "package.json"async function main() { const promptId = '792c1905-ecfe-41f4-8114-83e6a4a09a9f' //Terlalu malas untuk POST /antrian biarkan history = menunggu pengambilan(`http://127.0.0.1:8188/history/${promptId}`).then(re => re.json()) history = history[promptId] const nodeOutputs = Objek.nilai(history.outputs).filter(output => output.openpose_json) untuk (const nodeOutput dari nodeOutputs) { const openposeResults = JSON.parse(nodeOutput.openpose_json[0]) console.log(openposeResults) //Sebuah array berisi Openpose JSON untuk setiap frame }}main()
ular piton
import json, urllib.requestserver_address = "127.0.0.1:8188"prompt_id = '' #Terlalu malas untuk POST /queuedef get_history(prompt_id): dengan urllib.request.urlopen("http://{}/history/{}" .format(server_address, prompt_id)) sebagai respons: return json.loads(response.read())history = get_history(prompt_id)[prompt_id]for o dalam history['outputs']: untuk node_id dalam history['outputs'] : node_output = history['outputs'][node_id] if 'openpose_json' in node_output: print(json.loads(node_output['openpose_json'][0])) #Daftar berisi Openpose JSON untuk setiap frame
Node Praprosesor | sd-webui-controlnet/lainnya | ControlNet/Adaptor T2I |
---|---|---|
Segmentor OneMantan ADE20K | oneformer_ade20k | kontrol_v11p_sd15_seg |
Segmentor COCO OneMantan | oneformer_coco | kontrol_v11p_sd15_seg |
Segmentor Seragam | segmentasi | kontrol_sd15_seg kontrol_v11p_sd15_seg |
Node Praprosesor | sd-webui-controlnet/lainnya | ControlNet/Adaptor T2I |
---|---|---|
Palet Warna | warna | t2iaadapter_color |
Acak Konten | acak | t2iadapter_style |
Node Praprosesor | sd-webui-controlnet/lainnya | ControlNet/Adaptor T2I |
---|---|---|
Pencahayaan Gambar | warna_ulang_luminance | ioclab_sd15_recolor sai_xl_recolor_256lora bdsqlsz_controlllite_xl_recolor_luminance |
Intensitas Gambar | warna_intensitas | Entahlah. Mungkin sama seperti di atas? |
Sebuah gambar bernilai ribuan kata
https://github.com/Fannovel16/comfyui_controlnet_aux/blob/main/examples/ExecuteAll.png Gambar masukan: https://github.com/Fannovel16/comfyui_controlnet_aux/blob/main/examples/comfyui-controlnet-aux-logo. png
Repo ini memiliki mekanisme baru yang akan melewati node khusus mana pun yang tidak dapat diimpor. Jika Anda menemui kasus ini, silakan buat masalah pada tab Masalah dengan log dari baris perintah.
Ada dua cara untuk mempercepat DWPose: menggunakan pos pemeriksaan TorchScript (.torchscript.pt) atau ONNXRuntime (.onnx). Cara TorchScript sedikit lebih lambat dari ONNXRuntime tetapi tidak memerlukan perpustakaan tambahan dan masih jauh lebih cepat daripada CPU.
Detektor bbox skrip obor kompatibel dengan penaksir pose onnx dan sebaliknya.
Atur bbox_detector
dan pose_estimator
sesuai gambar ini. Anda dapat mencoba akhiran detektor bbox lainnya dengan .torchscript.pt
untuk mengurangi waktu deteksi bbox jika gambar masukan ideal.
Jika onnxruntime berhasil diinstal dan pos pemeriksaan menggunakan akhiran .onnx
, ini akan menggantikan backend cv2 default untuk memanfaatkan GPU. Perhatikan bahwa jika Anda menggunakan kartu NVidia, metode ini saat ini hanya dapat berfungsi pada CUDA 11.8 (ComfyUI_windows_portable_nvidia_cu118_or_cpu.7z) kecuali Anda mengkompilasi sendiri onnxruntime.
Ketahui build onnxruntime Anda:
NVidia CUDA 11.x atau di bawah/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
Perhatikan bahwa jika ini adalah pertama kalinya Anda menggunakan ComfyUI, harap uji apakah ComfyUI dapat berjalan di perangkat Anda sebelum melakukan langkah selanjutnya.
Tambahkan ke requirements.txt
Jalankan perintah install.bat
atau pip yang disebutkan dalam Instalasi
anime_face_segment: bdsqlsz/qinglong_controlnet-lllite/Annotators/UNet.pth, anime-seg/isnetis.ckpt
pose padat: LayerNorm/DensePose-TorchScript-dengan-hint-image/densepose_r50_fpn_dl.torchscript
posisi dw:
bbox_detector: Baik 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: Baik hr16/DWPose-TorchScript-BatchSize5/dw-ll_ucoco_384_bs5.torchscript.pt, yzd-v/DWPose/dw-ll_ucoco_384.onnx
pose_hewan (ap10k):
bbox_detector: Baik 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: Baik hr16/DWPose-TorchScript-BatchSize5/rtmpose-m_ap10k_256_bs5.torchscript.pt, hr16/UnJIT-DWPose/rtmpose-m_ap10k_256.onnx
hed: lllyasviel/Annotators/ControlNetHED.pth
tautan: lllyasviel/Annotators/res101.pth, lllyasviel/Annotators/latest_net_G.pth
diagram garis: 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
sam: dhkim2810/MobileSAM/mobile_sam.pt
seragam: lllyasviel/Annotators/upernet_global_small.pth
zoe: lllyasviel/Annotators/ZoeD_M12_N.pt
teed: bdsqlsz/qinglong_controlnet-lllite/7_model.pth
depth_anything: Baik LiheYoung/Depth-Anything/checkpoints/ depth_anything_vitl14.pth, LiheYoung/Depth-Anything/checkpoints/ depth_anything_vitb14.pth atau LiheYoung/Depth-Anything/checkpoints/ depth_anything_vits14.pth
diffusion_edge: Baik hr16/Diffusion-Edge/diffusion_edge_indoor.pt, hr16/Diffusion-Edge/diffusion_edge_urban.pt atau hr16/Diffusion-Edge/diffusion_edge_natrual.pt
unimatch: Baik hr16/Unimatch/gmflow-scale2-regrefine6-mixdata.pth, hr16/Unimatch/gmflow-scale2-mixdata.pth atau hr16/Unimatch/gmflow-scale1-mixdata.pth
zoe_kedalaman_anything: LiheYoung/Depth-Anything/checkpoints_metric_kedalaman/kedalaman_anything_metric_kedalaman_indoor.pt atau LiheYoung/Depth-Anything/checkpoints_metric_kedalaman/kedalaman_anything_metric_kedalaman_outdoor.pt
Terima kasih atas dukungan kalian semua. Saya tidak pernah mengira grafik bintang akan linier haha.