Skip to content

Commit dfb451d

Browse files
committed
fix: kling text to image
1 parent c7aa802 commit dfb451d

File tree

3 files changed

+35
-136
lines changed

3 files changed

+35
-136
lines changed

docs/zh/models/kling/kling-text-to-image.md

+25-24
Original file line numberDiff line numberDiff line change
@@ -24,40 +24,41 @@ updatedAt: 2025-05-08
2424
> 深色背景为可以修改的参数,非必选参数已经注释,可以按照自己的需求启用。
2525
2626

27-
::: code-group
28-
29-
30-
<<< @/zh/snippets/kling-text-to-image.py{121-122,129-135}[标准类版本]
31-
32-
33-
34-
<<< @/zh/snippets/kling-text-to-image-function.py{6-7,20-26}[纯函数版本]
35-
36-
37-
38-
:::
27+
<<< @/zh/snippets/kling-text-to-image.py{120-121,128-135}
3928

4029

4130
## 返回结果
4231

43-
返回结果为图片的 url每个 url 有效期一般为 3 天以内,尽快下载或者转存。
32+
返回结果为图片的 url 列表,这里使用参数 `n=2` 生成两张图片,每个 url kling 官方保证有效期为 30 天,尽快下载或者转存。
4433

4534
```
46-
https://cdn.klingai.com/bs2/upload-kling-api/6567899185/image/CjikMGgHQaYAAAAAA1CAQw-0_raw_image_0.png
35+
['https://cdn.klingai.com/bs2/upload-kling-api/8089468206/image/Cl6kH2gHPegAAAAABUwweg-0_raw_image_0.png', 'https://cdn.klingai.com/bs2/upload-kling-api/8089468206/image/Cl6kH2gHPegAAAAABUwweg-1_raw_image_0.png']
4736
```
4837

49-
![](https://cdn.jsdelivr.net/gh/timerring/scratchpad2023/2024/2025-05-04-23-33-40.png)
38+
![](https://cdn.jsdelivr.net/gh/timerring/scratchpad2023/2024/2025-05-11-20-50-49.png)
39+
40+
![](https://cdn.jsdelivr.net/gh/timerring/scratchpad2023/2024/2025-05-11-20-51-02.png)
5041

5142
## 函数流程图
5243

5344
```mermaid
54-
flowchart TD
55-
J[调用kling_generate_image获取task_id] --> K[开始轮询任务状态]
56-
K --> L[调用query_kling_image_url]
57-
L --> M{获取到图像URL?}
58-
M -->|否| N{是否超时?}
59-
N -->|否| O[等待1秒]
60-
O --> L
61-
N -->|是| P[返回超时错误]
62-
M -->|是| Q[返回图像URL]
45+
graph TD
46+
A[客户端初始化 KlingTextToImage] -->|提供 API 凭证| B[调用 generate_image 方法]
47+
B -->|传入提示词和参数| C[_kling_generate_image 方法]
48+
C -->|构建请求体| D[发送 POST 请求到 API]
49+
D -->|返回 task_id| E[开始轮询任务状态]
50+
51+
E -->|调用| F[_query_kling_image_url 方法]
52+
F -->|发送 GET 请求| G[检查任务状态]
53+
54+
G -->|任务状态?| H{任务完成?}
55+
H -->|是| I[提取并返回图像 URL]
56+
H -->|否| J{是否超时?}
57+
58+
J -->|是| K[返回 None]
59+
J -->|否| L[等待 1 秒]
60+
L --> F
61+
62+
I -->|返回图像 URL 列表| M[结束流程]
63+
K -->|返回超时信息| M
6364
```

docs/zh/snippets/kling-text-to-image-function.py

-102
This file was deleted.

docs/zh/snippets/kling-text-to-image.py

+10-10
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def __init__(self, api_token, api_url):
2020
'Content-Type': 'application/json'
2121
}
2222

23-
def kling_generate_image(self, model_name, prompt, negative_prompt, output_format, n, aspect_ratio, callback_url):
23+
def _kling_generate_image(self, model_name, prompt, negative_prompt, output_format, n, aspect_ratio, callback_url):
2424
"""使用 kling 生成图像
2525
2626
参数:
@@ -55,7 +55,7 @@ def kling_generate_image(self, model_name, prompt, negative_prompt, output_forma
5555
# 从 json 文件中返回任务 ID
5656
return json_data['data']['task_id']
5757

58-
def query_kling_image_url(self, task_id):
58+
def _query_kling_image_url(self, task_id):
5959
"""使用查询接口获取生成图像 url
6060
6161
输入参数:
@@ -77,11 +77,12 @@ def query_kling_image_url(self, task_id):
7777
json_data = json.loads(res.read().decode("utf-8"))
7878
# 如果任务状态为成功,则返回图像 url
7979
if json_data['data']['task_status'] == "succeed":
80-
return json_data['data']['task_result']['images'][0]['url']
80+
image_urls = [image['url'] for image in json_data['data']['task_result']['images']]
81+
return image_urls
8182
else:
8283
return None
8384

84-
def generate_image(self, model_name, prompt, negative_prompt="", output_format="png", n=1, aspect_ratio="16:9", callback_url=""):
85+
def generate_image(self, model_name, prompt, negative_prompt="", output_format="png", n=1, aspect_ratio="16:9", callback_url="", timeout=60):
8586
"""实现功能,直接根据预设的参数返回生成图像的 url
8687
8788
参数:
@@ -96,14 +97,12 @@ def generate_image(self, model_name, prompt, negative_prompt="", output_format="
9697
image_url: 图像 url
9798
"""
9899
# 调用生成图像 api 提交图像生成任务,返回获取 task_id。
99-
task_id = self.kling_generate_image(model_name, prompt, negative_prompt, output_format, n, aspect_ratio, callback_url)
100+
task_id = self._kling_generate_image(model_name, prompt, negative_prompt, output_format, n, aspect_ratio, callback_url)
100101
start_time = time.time()
101-
# 队列等待超时时间
102-
timeout = 60
103102
# 轮询等待生成完成
104103
while True:
105104
# 根据 task_id 调用查询图像api 查看图像生成任务是否完成。
106-
image_url = self.query_kling_image_url(task_id)
105+
image_url = self._query_kling_image_url(task_id)
107106
# 如果图像生成任务完成,则返回图像 url
108107
if image_url is not None:
109108
return image_url
@@ -119,7 +118,7 @@ def generate_image(self, model_name, prompt, negative_prompt="", output_format="
119118
# 使用示例
120119
if __name__ == "__main__":
121120
API_URL="www.dmxapi.cn" # API 节点地址
122-
DMX_API_TOKEN = "sk-XXXXXXXXXXX" # API 密钥
121+
DMX_API_TOKEN = "sk-XXXXXXXXXXXXXX" # API 密钥
123122

124123
# 创建图像生成器实例
125124
kling_text_to_image = KlingTextToImage(api_token=DMX_API_TOKEN, api_url=API_URL)
@@ -132,7 +131,8 @@ def generate_image(self, model_name, prompt, negative_prompt="", output_format="
132131
# output_format="png", # 输出格式:png 或 jpg
133132
# n=1, # int, 生成数量 [1, 9]
134133
# aspect_ratio="16:9", # 输出比例:16:9, 9:16, 1:1, 4:3, 3:4, 3:2, 2:3
135-
# callback_url="" # 回调地址,可以用于 webhook 等通知场景
134+
# callback_url="", # 回调地址,可以用于 webhook 等通知场景
135+
# timeout=120 # 队列等待超时时间
136136
)
137137

138138
print(image_url)

0 commit comments

Comments
 (0)