一、前言
Liblib AI(哩布哩布 AI)是一個集成了先進人工智能技術和用戶友好設計的 AI 圖像創作繪畫平臺和模型分享社區。
- 強大的圖像生成能力 :以 Stable Diffusion 技術為核心,提供文生圖、圖生圖、圖像后期處理等功能,支持多種模型和風格特征的模型(LoRA 模型),并允許用戶進行面部修復和高清修復等操作。
- 豐富的模型素材庫 :擁有 10 萬 + 的模型庫,涵蓋插畫、攝影、3D 立體、商品攝影、設計、數字藝術、油畫、水彩、二次元等 300 多種風格,用戶可訓練專屬 LoRA 模型并參與社區互動。
- 多端支持 :除了電腦端,還有手機端 APP,用戶可以通過手機號驗證登錄使用,APP 版本具備 AI 繪畫、AI 寫作、AI 音頻合成等功能。
Liblib是個圖像ai平臺,有根據文字生成圖片,修復圖片,圖片重繪等多種功能。
LiblibAI官網:LiblibAI-哩布哩布AI - 中國領先的AI創作平臺
LiblibAI開放平臺文檔:Docs
API試用計劃:登錄后可領取500試用積分,限時7天免費測試體驗。
二、準備
1、首先要去官網注冊一個賬號并登錄。
2、在官網首頁左側導航欄有API開發平臺的菜單,點擊進去,記得先登錄賬號。
?3、點擊進去會看到兩個使用api平臺需要用到的key,把這兩個key復制出來保存好。
三、主要步驟:
1、獲取AccessKey與SecretKey
2、使用秘鑰,獲取網址必要的參數
3、請求網址,基于文生圖參數,獲取任務id
4、請求網址,基于任務id,獲取圖片網址
四、具體操作
1、接口網址
Liblib開放平臺域名:https://openapi.liblibai.cloud(無法直接打開,需配合密鑰訪問)
2、生成API密鑰
在登錄Liblib領取API試用積分或購買API積分后,Liblib會生成開放平臺訪問密鑰,用于后續API接口訪問,密鑰包括:?
- AccessKey,API訪問憑證,唯一識別訪問用戶,長度通常在20-30位左右,如:KIQMFXjHaobx7wqo9XvYKA?
- SecretKey,API訪問密鑰,用于加密請求參數,避免請求參數被篡改,長度通常在30位以上,如:KppKsn7ezZxhi6lIDjbo7YyVYzanSu2d?
3、使用密鑰?獲取網址必要的參數
申請API密鑰之后,需要在每次請求API接口的查詢字符串中固定傳遞以下參數:?
?
?
如請求地址:https://test.xxx.com/api/genImg?AccessKey=KIQMFXjHaobx7wqo9XvYKA&Signature=test1232132&Timestamp=1725458584000&SignatureNonce=random1232
4、Python生成密碼代碼:
# 請求API接口的uri地址
text2img_uri = "/api/generate/webui/text2img"def make_sign(uri):"""生成簽名"""# 當前毫秒時間戳timestamp = str(int(time.time() * 1000))# 隨機字符串signature_nonce = str(uuid.uuid4()).replace('-', '')# 拼接請求數據content = '&'.join((uri, timestamp, signature_nonce))# 生成簽名digest = hmac.new(SECRET_KEY.encode(), content.encode(), sha1).digest()# 移除為了補全base64位數而填充的尾部等號sign = base64.urlsafe_b64encode(digest).rstrip(b'=').decode()return sign, timestamp, signature_nonce
注意:uri要與調用的接口保持一致
5、Python調用接口代碼:
def call_liblibai_api():generateUuid = ""# 生成簽名sign, timestamp, signature_nonce = make_sign(text2img_uri)# 準備請求參數uri = 'https://openapi.liblibai.cloud/api/generate/webui/text2img' # 根據API地址更新uriuri = f"{uri}?AccessKey={ACCESS_KEY}&Signature={sign}&Timestamp={timestamp}&SignatureNonce={signature_nonce}"print(uri)headers = {'Content-Type': 'application/json'}data = {"templateUuid": "e10adc3949ba59abbe56e057f20f883e","generateParams": {"checkPointId": "ba34a22f1c044472a42b6051aac2afb3","prompt": "This is a 12-story hospital building. The ground floor houses the emergency room and pharmacy. The entrance is spacious and has a sheltered structure. Each floor from the second to the twelfth floor has a ward area, including a nurse station, ward Windows, and space for placing medical equipment. The building's exterior is simple, with Windows arranged regularly. From the outside, a clear 12-story structure can be seen.","negativePrompt": "ng_deepnegative_v1_75t,(badhandv4:1.2),EasyNegative,(worst quality:2),","sampler": 15,"steps": 20,"cfgScale": 7,"width": 768,"height": 1024,"imgCount": 1,"randnSource": 0,"seed": 2228967414,"restoreFaces": 0,"hiResFixInfo": {"hiresSteps": 20,"hiresDenoisingStrength": 0.75,"upscaler": 10,"resizedWidth": 1024,"resizedHeight": 1536}}}try:# 發送POST請求response = requests.post(uri, headers=headers, data=json.dumps(data))# 處理響應if response.status_code == 200:result = response.json()generateUuid = result['data']['generateUuid']print('API調用成功,返回結果:', result)else:print('API調用失敗,狀態碼:', response.status_code, ',響應內容:', response.text)except requests.exceptions.RequestException as e:print('請求異常:', e)return generateUuid
注意:具體參數說明,請參考開發文檔
6、接口返回示例,獲取任務id:
{"code": 0,"msg": "","data": {"generateUuid": "8dcbfa2997444899b71357ccb7db378b"}
}
7、Python查看任務,并得到圖片地址:
def get_cd_laowang_img(generateUuid):result = {}# 生成簽名sign, timestamp, signature_nonce = make_sign(generate_webui_status_uri)# 準備請求參數uri = 'https://openapi.liblibai.cloud/api/generate/webui/status' # 根據API地址更新uriuri = f"{uri}?AccessKey={ACCESS_KEY}&Signature={sign}&Timestamp={timestamp}&SignatureNonce={signature_nonce}"print(uri)headers = {'Content-Type': 'application/json'}data = {"generateUuid": generateUuid,}try:# 發送POST請求response = requests.post(uri, headers=headers, data=json.dumps(data))# 處理響應if response.status_code == 200:result = response.json()print('API調用成功,返回結果:', result)else:print('API調用失敗,狀態碼:', response.status_code, ',響應內容:', response.text)except requests.exceptions.RequestException as e:print('請求異常:', e)return result
注意:因為api接口改變,所以需要再次生成簽名
五、全部代碼如下:
import requests
import json
import hmac
from hashlib import sha1
import base64
import time
import uuid# 配置信息
ACCESS_KEY = 'MXYG3cwFHVRa3wsLU5iJwQ' # 替換為你的AccessKey
SECRET_KEY = '*************************' # 替換為你的SecretKey# 請求API接口的uri地址
text2img_uri = "/api/generate/webui/text2img"
generate_webui_status_uri = "/api/generate/webui/status"def make_sign(uri):"""生成簽名"""# 當前毫秒時間戳timestamp = str(int(time.time() * 1000))# 隨機字符串signature_nonce = str(uuid.uuid4()).replace('-', '')# 拼接請求數據content = '&'.join((uri, timestamp, signature_nonce))# 生成簽名digest = hmac.new(SECRET_KEY.encode(), content.encode(), sha1).digest()# 移除為了補全base64位數而填充的尾部等號sign = base64.urlsafe_b64encode(digest).rstrip(b'=').decode()return sign, timestamp, signature_noncedef call_liblibai_api():generateUuid = ""# 生成簽名sign, timestamp, signature_nonce = make_sign(text2img_uri)# 準備請求參數uri = 'https://openapi.liblibai.cloud/api/generate/webui/text2img' # 根據API地址更新uriuri = f"{uri}?AccessKey={ACCESS_KEY}&Signature={sign}&Timestamp={timestamp}&SignatureNonce={signature_nonce}"print(uri)headers = {'Content-Type': 'application/json'}data = {"templateUuid": "e10adc3949ba59abbe56e057f20f883e","generateParams": {"checkPointId": "ba34a22f1c044472a42b6051aac2afb3","prompt": "This is a 12-story hospital building. The ground floor houses the emergency room and pharmacy. The entrance is spacious and has a sheltered structure. Each floor from the second to the twelfth floor has a ward area, including a nurse station, ward Windows, and space for placing medical equipment. The building's exterior is simple, with Windows arranged regularly. From the outside, a clear 12-story structure can be seen.","negativePrompt": "ng_deepnegative_v1_75t,(badhandv4:1.2),EasyNegative,(worst quality:2),","sampler": 15,"steps": 20,"cfgScale": 7,"width": 768,"height": 1024,"imgCount": 1,"randnSource": 0,"seed": 2228967414,"restoreFaces": 0,"hiResFixInfo": {"hiresSteps": 20,"hiresDenoisingStrength": 0.75,"upscaler": 10,"resizedWidth": 1024,"resizedHeight": 1536}}}try:# 發送POST請求response = requests.post(uri, headers=headers, data=json.dumps(data))# 處理響應if response.status_code == 200:result = response.json()generateUuid = result['data']['generateUuid']print('API調用成功,返回結果:', result)else:print('API調用失敗,狀態碼:', response.status_code, ',響應內容:', response.text)except requests.exceptions.RequestException as e:print('請求異常:', e)return generateUuiddef get_cd_laowang_img(generateUuid):result = {}# 生成簽名sign, timestamp, signature_nonce = make_sign(generate_webui_status_uri)# 準備請求參數uri = 'https://openapi.liblibai.cloud/api/generate/webui/status' # 根據API地址更新uriuri = f"{uri}?AccessKey={ACCESS_KEY}&Signature={sign}&Timestamp={timestamp}&SignatureNonce={signature_nonce}"print(uri)headers = {'Content-Type': 'application/json'}data = {"generateUuid": generateUuid,}try:# 發送POST請求response = requests.post(uri, headers=headers, data=json.dumps(data))# 處理響應if response.status_code == 200:result = response.json()print('API調用成功,返回結果:', result)else:print('API調用失敗,狀態碼:', response.status_code, ',響應內容:', response.text)except requests.exceptions.RequestException as e:print('請求異常:', e)return resultif __name__ == '__main__':generateUuid = call_liblibai_api()time.sleep(20)if generateUuid != "":print("generateUuid:", generateUuid)result = get_cd_laowang_img(generateUuid)image_url = result['data']['images'][0]["imageUrl"]print(f"generateUuid:{generateUuid}")print(f"圖片地址:{image_url}")