ชุดโหนด ComfyUI แบบพลักแอนด์เพลย์สำหรับการสร้างอิมเมจคำใบ้ ControlNet
"สไตล์อนิเมะ การประท้วงบนท้องถนน เมืองไซเบอร์พังค์ ผู้หญิงผมสีชมพูและดวงตาสีทอง (มองผู้ชม) ถือป้ายพร้อมข้อความ "ComfyUI ControlNet Aux" ที่เป็นตัวหนา สีชมพูนีออน" บน Flux.1 Dev
รหัสจะถูกคัดลอกวางจากโฟลเดอร์ที่เกี่ยวข้องใน https://github.com/lllyasviel/ControlNet/tree/main/annotator และเชื่อมต่อกับ ? ฮับ
เครดิตและลิขสิทธิ์ทั้งหมดไปที่ https://github.com/lllyasviel
ไปที่หน้าอัปเดตเพื่อติดตามการอัปเดต
ติดตั้ง ComfyUI Manager และทำตามขั้นตอนที่แนะนำเพื่อติดตั้ง repo นี้
หากคุณใช้งานบน 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
โปรดทราบว่า repo นี้รองรับเฉพาะตัวประมวลผลล่วงหน้าที่สร้างรูปภาพคำใบ้ (เช่น 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 |
เส้นตรงที่สมจริง | lineart (หรือ lineart_coarse หากเปิดใช้ coarse ) | control_v11p_sd15_lineart |
อะนิเมะลิเนียร์ | lineart_anime | control_v11p_sd15s2_lineart_anime |
มังงะลิเนียร์ | lineart_anime_denoise | control_v11p_sd15s2_lineart_anime |
เส้น M-LSD | มล | 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 |
เอนี่ไลน์ ลิเนียร์ | MistoLine_fp16.ตัวป้องกัน MistoLine_rank256 control_v11p_sd15s2_lineart_anime control_v11p_sd15_lineart |
โหนดตัวประมวลผลล่วงหน้า | sd-webui-controlnet/อื่นๆ | ControlNet/T2I-อะแดปเตอร์ |
---|---|---|
แผนที่ความลึก MiDaS | (ปกติ) ความลึก | control_v11f1p_sd15_ความลึก การควบคุม_ความลึก t2iadapter_ความลึก |
แผนที่ความลึก LeReS | deep_leres | control_v11f1p_sd15_ความลึก การควบคุม_ความลึก t2iadapter_ความลึก |
แผนที่ความลึกของโซอี้ | deep_zoe | control_v11f1p_sd15_ความลึก การควบคุม_ความลึก t2iadapter_ความลึก |
แผนที่ปกติของ MiDaS | ปกติ_แผนที่ | ควบคุม_ปกติ |
แผนที่ปกติของ BAE | ปกติ_แบ | control_v11p_sd15_normalbae |
เครื่องกลั่นแบบมือ MeshGraphormer (HandRefinder) | deep_hand_refiner | control_sd15_inpaint_deep_hand_fp16 |
ความลึกอะไรก็ได้ | ความลึก_อะไรก็ตาม | ความลึก-อะไรก็ได้ |
Zoe Depth อะไรก็ได้ (โดยพื้นฐานแล้ว Zoe แต่ตัวเข้ารหัสจะถูกแทนที่ด้วย DepthAnything) | ความลึก_อะไรก็ตาม | ความลึก-อะไรก็ได้ |
ดีซีนปกติ | control_normal/control_v11p_sd15_normalbae | |
ความลึกเมตริก 3 มิติ | control_v11f1p_sd15_ความลึก การควบคุม_ความลึก t2iadapter_ความลึก | |
เมตริก 3 มิติ ปกติ | 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 (detect_body + ตรวจจับ_มือ) openpose_faceonly (ตรวจจับ_ใบหน้า) openpose_full (detect_hand + ตรวจพบร่างกาย + ตรวจจับ_ใบหน้า) | control_v11p_sd15_openpose control_openpose t2iadapter_openpose |
MediaPipe Face Mesh | 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
บน UI หรือตำแหน่งข้อมูล 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))สำหรับ (constposeNode ของposeNodes) { const openposeResults = JSON.parse( app.nodeOutputs [poseNode.id] .openpose_json [0]) console.log (openposeResults) //อาร์เรย์ที่มี Openpose JSON สำหรับแต่ละเฟรม}
สำหรับผู้ใช้ API: Javascript
นำเข้าการดึงข้อมูลจาก "node-fetch" //อย่าลืมเพิ่ม "type": "module" ไปที่ "package.json"async function main() { const promptId = '792c1905-ecfe-41f4-8114-83e6a4a09a9f' //ขี้เกียจเกินไป เพื่อ POST / คิว ให้ประวัติ = รอ fetch (`http://127.0.0.1:8188/history/${promptId}`). จากนั้น (re => re.json ()) history = history [promptId] const nodeOutputs = Object.values (history.outputs) .filter (output => output.openpose_json) สำหรับ (const nodeOutput ของ nodeOutputs) { const openposeResults = JSON.parse(nodeOutput.openpose_json[0]) console.log(openposeResults) //อาร์เรย์ที่มี Openpose JSON สำหรับแต่ละเฟรม }}main()
หลาม
นำเข้า 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]for o in history['outputs']: for node_id in history['outputs']: node_output = history['outputs'][node_id] ถ้า 'openpose_json' ใน 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 เซ็กเมนเตอร์ | การแบ่งส่วน | control_sd15_seg control_v11p_sd15_seg |
โหนดตัวประมวลผลล่วงหน้า | sd-webui-controlnet/อื่นๆ | ControlNet/T2I-อะแดปเตอร์ |
---|---|---|
จานสี | สี | t2iadapter_color |
สับเปลี่ยนเนื้อหา | สุ่ม | t2iadapter_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
repo นี้มีกลไกใหม่ที่จะข้ามโหนดที่กำหนดเองใดๆ ที่ไม่สามารถนำเข้าได้ หากคุณพบกรณีนี้ โปรดสร้างปัญหาในแท็บปัญหาพร้อมบันทึกจากบรรทัดคำสั่ง
มีสองวิธีในการเร่งความเร็ว DWPose: การใช้จุดตรวจสอบ TorchScript (.torchscript.pt) หรือ ONNXRuntime (.onnx) วิธีของ TorchScript นั้นช้ากว่า ONNXRuntime เล็กน้อย แต่ไม่ต้องการไลบรารีเพิ่มเติมใดๆ และยังคงเร็วกว่า CPU อยู่มาก
ตัวตรวจจับ bbox ของ torchscript สามารถใช้งานร่วมกับตัวประมาณค่า onnx และในทางกลับกัน
ตั้งค่า bbox_detector
และ pose_estimator
ตามภาพนี้ คุณสามารถลองใช้ตัวตรวจจับ bbox ที่ลงท้ายด้วย .torchscript.pt
เพื่อลดเวลาในการตรวจจับ bbox หากรูปภาพอินพุตเหมาะสมที่สุด
หากติดตั้ง onnxruntime สำเร็จและจุดตรวจสอบที่ใช้ลงท้ายด้วย .onnx
ระบบจะแทนที่แบ็กเอนด์ cv2 เริ่มต้นเพื่อใช้ประโยชน์จาก GPU โปรดทราบว่าหากคุณใช้การ์ด NVidia ปัจจุบันวิธีนี้ใช้ได้กับ CUDA 11.8 เท่านั้น (ComfyUI_windows_portable_nvidia_cu118_or_cpu.7z) เว้นแต่คุณจะคอมไพล์ onnxruntime ด้วยตัวเอง
รู้จัก onnxruntime build ของคุณ:
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
ตกลง:
bbox_detector: yzd-v/DWPose/yolox_l.onnx, hr16/yolox-onnx/yolox_l.torchscript.pt, hr16/yolo-nas-fp16/yolo_nas_l_fp16.onnx, ชม.16/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, ชม.16/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/คำอธิบายประกอบ/mlsd_large_512_fp32.pth
ปกติ: lllyasviel/Annotators/scannet.pt
oneformer: lllyasviel/Annotators/250_16_swin_l_oneformer_ade20k_160k.pth
open_pose: lllyasviel/คำอธิบายประกอบ/body_pose_model.pth, lllyasviel/คำอธิบายประกอบ/hand_pose_model.pth, lllyasviel/คำอธิบายประกอบ/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
teed: bdsqlsz/qinglong_controlnet-lllite/7_model.pth
deep_anything: LiheYoung/Depth-Anything/checkpoints/deep_anything_vitl14.pth, LiheYoung/Depth-Anything/checkpoints/deep_anything_vitb14.pth หรือ LiheYoung/Depth-Anything/checkpoints/deep_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_deep_anything: ไม่ว่าจะเป็น LiheYoung/Depth-Anything/checkpoints_metric_deep/deep_anything_metric_deep_indoor.pt หรือ LiheYoung/Depth-Anything/checkpoints_metric_deep/deep_anything_metric_deep_outdoor.pt
ขอบคุณสำหรับการสนับสนุนของคุณ ไม่คิดว่ากราฟดาวจะเป็นเส้นตรง 555