一、為什么要使用comfyui的api?對比webui的api,它有什么好處?
1、自帶隊(duì)列
2、支持websocket
3、無需關(guān)心插件是否有開放api接口,只要插件在瀏覽器中可以正常使用,接口就一定可以使用
4、開發(fā)人員只需關(guān)心繪圖流程的搭建
5、切換模型、進(jìn)度查詢soeasy
6、輕松實(shí)現(xiàn)圖片生成時(shí)的漸變效果
7、支持中斷繪圖任務(wù)
8、無需繁瑣的base64圖片轉(zhuǎn)換
其實(shí)我們之前一直都是用web-ui的api,最近web-ui被我們給廢棄掉了,主要是因?yàn)閏omfyui基本上解決了webui做開發(fā)所有的弊端,首先列隊(duì)的問題不用去管,它自己有列隊(duì),插件這塊是最方便的,用上comfyui以后就不要去管插件是怎么調(diào)用的,只要你在工作流里面用了什么插件,保存為api之后,他直接下發(fā)后臺就會(huì)自動(dòng)去運(yùn)行,也不用去管插件具體怎么調(diào)用。如果是webui,有些比較良心的插件,直接把接口寫好,然后暴露出來, 如果沒寫的話,你用起來就會(huì)非常的麻煩,還得去研究它是怎么去調(diào)用的。所以 ,小伙伴們,別再執(zhí)著用webui的api了,那個(gè)確實(shí)反人類,假如做開發(fā)的話問題會(huì)很多,比較煩人,就像獲取任務(wù)進(jìn)度,還有這個(gè)線程鎖,切換模型這塊都非常繁瑣。我為了研究那東西 ,看代碼看得頭都大了 ,整整研究了一個(gè)月才把代碼改好。
二、接口詳解
本文主要介紹 stable diffusion API 調(diào)用,準(zhǔn)確來說是對 stable diffusion comfyui 的 API 調(diào)用。需要apifox接口文件的可以查看:
https://gitee.com/BTYY/wailikeji-chatgpt/blob/master/comfyui-api.md
1、繪圖接口:POST /prompt
注意:該接口只做繪圖任務(wù)的下發(fā),然后返回任務(wù)ID信息。并不會(huì)直接返回最終的結(jié)果圖!
與webui的api不同的是,comfyui的api并沒有單獨(dú)區(qū)分文生圖、圖生圖的接口,而是所有的繪圖任務(wù)的下發(fā)全部都使用POST /prompt。那具體是文生圖、圖生圖、又或者是換臉、倒推關(guān)鍵詞等,取決于你的參數(shù)!
需要上傳的參數(shù)只有兩個(gè)
請求參數(shù)
名稱 | 類型 | 必選 | 說明 |
---|---|---|---|
client_id | string | 是 | 任務(wù)ID,由客戶端生成,用于標(biāo)記任務(wù)是誰發(fā)起的 |
prompt | json | 是 | 任務(wù)參數(shù) |
返回參數(shù)
名稱 | 類型 | 說明 |
---|---|---|
prompt_id | string | 任務(wù)ID |
number | int | 當(dāng)前任務(wù)序號,可用于后續(xù)獲取需要等待任務(wù)數(shù)的計(jì)算 |
node_errors | json | 錯(cuò)誤信息 |
返回示例
{
"prompt_id": "bd2cfa2c-de87-4258-89cc-d8791bc13a61",
"number": 501,
"node_errors": {}
}
使用說明
client_id:任務(wù)ID,由客戶端生成,用于標(biāo)記任務(wù)是誰發(fā)起的,相當(dāng)于告訴comfyui,該繪圖任務(wù)是由用戶A發(fā)起的,后續(xù)comfyui就會(huì)通過websocket將屬于用戶A的繪圖信息推送給你
prompt:prompt所傳的是一個(gè)json數(shù)據(jù),它是由comfyui瀏覽器通過保存api生成的json數(shù)據(jù),如下圖
至于正反、提示詞、模型、vae、圖片尺寸、批次、提示詞相關(guān)性、隨機(jī)種子、采樣器、降噪值等參數(shù),只需替換json中對應(yīng)的參數(shù)為用戶上傳的參數(shù)即可
比如用戶上傳的圖片尺寸是768*512,那你只需將json數(shù)據(jù)中的width改為768、height改為512即可,其他的參數(shù)也是同樣的道理!
2、websocket:/ws?client_id=XXXXXXXX
client_id后面的參數(shù)即為上面/prompt接口中上傳給comfyui的client_id,假如沒有上傳client_id,那comfyui就不知道連上該websocket的用戶是誰,也就無法進(jìn)行信息推送!comfyui拿到client_id后,即可知道當(dāng)前是哪個(gè)用戶,后續(xù)就會(huì)通過websocket將屬于該用戶的繪圖信息精準(zhǔn)推送給他
注意:websocket只需做監(jiān)聽處理,無需通過websocket向comfyui發(fā)送任何消息
websocket數(shù)據(jù)解析:
主要有兩種數(shù)據(jù)格式:
1、文本數(shù)據(jù),文本數(shù)據(jù)主要通知以下幾個(gè)繪圖信息:
通知任務(wù)變更、當(dāng)前執(zhí)行的步驟、進(jìn)度
2、二進(jìn)制數(shù)據(jù),即圖片預(yù)覽信息
(一)文本數(shù)據(jù)詳解:
(1)任務(wù)變更通知:
{
"type":"status",
"data":{
"status":{
"exec_info":{
"queue_remaining":7
}
}
}
}
當(dāng)你收到type為status信息時(shí),這是comfyui在告訴你,當(dāng)前任務(wù)數(shù)發(fā)生變更,queue_remaining是指當(dāng)前還有多少個(gè)任務(wù)需要處理。
注意,此處的queue_remaining并不是告訴你在你的任務(wù)之前還有多少個(gè)任務(wù)需要處理!而是總的!
所以,如果你也想像我一樣(見下圖),當(dāng)還沒輪到你的繪圖任務(wù)時(shí),顯示還需等待多少個(gè)任務(wù),你就需要借助comfyui的另一個(gè)接口:GET /queue:獲取詳細(xì)任務(wù)隊(duì)列信息,正在運(yùn)行的以及掛起的。該接口會(huì)返回掛起的任務(wù)信息,其中有prompt_id信息和number信息,你可以根據(jù)這number信息獲取到當(dāng)前任務(wù)排在第幾位。具體如何調(diào)用,這里就不進(jìn)行展開!
(2)當(dāng)前任務(wù)開始執(zhí)行:
{
"type":"execution_start",
"data":{
"prompt_id":"3935f7c3-ec38-4d94-843f-86fe86c6d384"
}
}
當(dāng)你收到type為execution_start信息時(shí),這是comfyui在告訴你,你的任務(wù)id,prompt_id為“3935f7c3-ec38-4d94-843f-86fe86c6d384”的任務(wù)當(dāng)前正在被執(zhí)行
(3)當(dāng)前任務(wù)執(zhí)行的步驟信息:
{
"type":"executing",
"data":{
"node":"5",
"prompt_id":"3935f7c3-ec38-4d94-843f-86fe86c6d384"
}
}
當(dāng)你收到type為executing信息時(shí),這是comfyui在告訴你,你的任務(wù)id,prompt_id為“3935f7c3-ec38-4d94-843f-86fe86c6d384”的任務(wù)當(dāng)前正在執(zhí)行節(jié)點(diǎn)5的步驟,此處你可以解析到前端,顯示當(dāng)前執(zhí)行的步驟名稱,如下圖所示
(4)當(dāng)前進(jìn)度信息:
{
"type":"progress",
"data":{
"value":1,
"max":10
}
}
當(dāng)你收到type為progress信息時(shí),這是comfyui在告訴你,當(dāng)前步驟執(zhí)行的進(jìn)度,value是當(dāng)前的步數(shù),max是總的步數(shù),如下圖所示
(5)繪圖結(jié)束:
{
"type":"executing",
"data":{
"node":null,
"prompt_id":"37099310-a790-44f4-8d13-4f4d5f69c891"
}
}
繪圖結(jié)束時(shí),type類型仍然是executing,和前面的(3)是一樣的,區(qū)別主要在于node為null,也就是當(dāng)type=executing,且node=null的時(shí)候,說明流程已經(jīng)跑完,此時(shí)需要通過接口GET /history/{prompt_id}獲取輸出的圖片信息。底下是通過history獲取到的圖片信息:
{
"37099310-a790-44f4-8d13-4f4d5f69c891": {
略。。。。。。。。。。
"outputs": {
"18": {
"images": [
{
"filename": "ComfyUI_temp_slqio_00001_.png",
"subfolder": "",
"type": "temp"
},
{
"filename": "ComfyUI_temp_slqio_00002_.png",
"subfolder": "",
"type": "temp"
},
{
"filename": "ComfyUI_temp_slqio_00003_.png",
"subfolder": "",
"type": "temp"
},
{
"filename": "ComfyUI_temp_slqio_00004_.png",
"subfolder": "",
"type": "temp"
}
]
},
"22": {
"images": [
{
"filename": "ComfyUI_temp_rfvdr_00001_.png",
"subfolder": "",
"type": "temp"
},
{
"filename": "ComfyUI_temp_rfvdr_00002_.png",
"subfolder": "",
"type": "temp"
},
{
"filename": "ComfyUI_temp_rfvdr_00003_.png",
"subfolder": "",
"type": "temp"
},
{
"filename": "ComfyUI_temp_rfvdr_00004_.png",
"subfolder": "",
"type": "temp"
}
]
},
"24": {
"images": [
{
"filename": "ComfyUI_00702_.png",
"subfolder": "",
"type": "output"
},
{
"filename": "ComfyUI_00703_.png",
"subfolder": "",
"type": "output"
},
{
"filename": "ComfyUI_00704_.png",
"subfolder": "",
"type": "output"
},
{
"filename": "ComfyUI_00705_.png",
"subfolder": "",
"type": "output"
}
]
}
}
}
}
outputs中的內(nèi)容就是最終生成的圖片信息,我們通過將圖片信息進(jìn)行拼接,即可獲取到圖片的url訪問地址,
例如:ComfyUI_00702_.png這張圖片,其拼接后的訪問地址就是:
http://127.0.0.1:8188/view?filename=ComfyUI_00702_.png&type=output
該地址實(shí)際是使用了comfyui的view接口
3、圖片的在線預(yù)覽接口:GET /view
圖片的在線預(yù)覽接口(上傳圖像,生圖圖像,蒙蔽圖像,均通過該接口預(yù)覽)
請求參數(shù)
名稱 | 位置 | 類型 | 必選 | 說明 |
---|---|---|---|---|
filename | query | string | 是 | 圖片名稱 |
type | query | string | 否 | 圖片存放位置的文件夾(input為長傳圖片,output為生成的圖片) |
subfolder | query | string | 否 | 子文件夾(沒有可不填) |
preview | query | string | 否 | 預(yù)覽 |
channel | query | string | 否 | 無 |
在前面的websocket中,我們通過history獲取最終的圖片信息,我們將圖片信息進(jìn)行拼接,即可獲取到圖片的url訪問地址,就是通過該接口獲取到圖片
(二)二進(jìn)制數(shù)據(jù)詳解:
二進(jìn)制數(shù)據(jù)就是在繪圖過程中,如果在采樣器中有開啟圖片預(yù)覽,則comfyui會(huì)以二進(jìn)制數(shù)據(jù)的方式推送給你,如果沒有開啟,則沒有,如下:
總結(jié)
至此,stable diffusion comfyui的api的整個(gè)調(diào)用邏輯已經(jīng)走完,無論是文生圖、圖生圖、換臉、倒推關(guān)鍵詞等,都是走相同的流程。你們在實(shí)際開發(fā)過程中也可以參考我的項(xiàng)目來實(shí)現(xiàn),需要我的comfyui的workflow.json工作流的可以聯(lián)系我獲取v:ai_009966文章來源:http://www.zghlxwxcb.cn/news/detail-751929.html
源碼地址:
https://ext.dcloud.net.cn/plugin?id=12603
項(xiàng)目體驗(yàn)地址:
https://pcai.wailikeji.com/文章來源地址http://www.zghlxwxcb.cn/news/detail-751929.html
需要整個(gè)項(xiàng)目源碼的聯(lián)系我v:ai_009966
到了這里,關(guān)于stable diffusion comfyui的api使用教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!