文生图:根据文本提示词生成图片
curl --request POST \
--url https://api.apiyi.com/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "MAI-Image-2.6-Flash",
"prompt": "一家古风茶馆的门面,木质招牌上写着「API易 欢迎」,红灯笼,黄昏暖光,写实摄影"
}
'import requests
url = "https://api.apiyi.com/v1/images/generations"
payload = {
"model": "MAI-Image-2.6-Flash",
"prompt": "一家古风茶馆的门面,木质招牌上写着「API易 欢迎」,红灯笼,黄昏暖光,写实摄影"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'MAI-Image-2.6-Flash',
prompt: '一家古风茶馆的门面,木质招牌上写着「API易 欢迎」,红灯笼,黄昏暖光,写实摄影'
})
};
fetch('https://api.apiyi.com/v1/images/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.apiyi.com/v1/images/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'MAI-Image-2.6-Flash',
'prompt' => '一家古风茶馆的门面,木质招牌上写着「API易 欢迎」,红灯笼,黄昏暖光,写实摄影'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.apiyi.com/v1/images/generations"
payload := strings.NewReader("{\n \"model\": \"MAI-Image-2.6-Flash\",\n \"prompt\": \"一家古风茶馆的门面,木质招牌上写着「API易 欢迎」,红灯笼,黄昏暖光,写实摄影\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.apiyi.com/v1/images/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"MAI-Image-2.6-Flash\",\n \"prompt\": \"一家古风茶馆的门面,木质招牌上写着「API易 欢迎」,红灯笼,黄昏暖光,写实摄影\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apiyi.com/v1/images/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"MAI-Image-2.6-Flash\",\n \"prompt\": \"一家古风茶馆的门面,木质招牌上写着「API易 欢迎」,红灯笼,黄昏暖光,写实摄影\"\n}"
response = http.request(request)
puts response.read_body{
"created": 1790999642,
"data": [
{
"b64_json": "<string>"
}
],
"usage": {
"prompt_tokens": 1000,
"total_tokens": 1000,
"output_tokens": 0
}
}MAI-Image 2.6 生圖/編輯
文生圖 API 參考
MAI-Image 2.6 文生圖 API 參考與線上除錯 — 純文本提示詞出圖,width/height 自定義尺寸最高 1536×1536 面積,固定返回 PNG base64
POST
/
v1
/
images
/
generations
文生图:根据文本提示词生成图片
curl --request POST \
--url https://api.apiyi.com/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "MAI-Image-2.6-Flash",
"prompt": "一家古风茶馆的门面,木质招牌上写着「API易 欢迎」,红灯笼,黄昏暖光,写实摄影"
}
'import requests
url = "https://api.apiyi.com/v1/images/generations"
payload = {
"model": "MAI-Image-2.6-Flash",
"prompt": "一家古风茶馆的门面,木质招牌上写着「API易 欢迎」,红灯笼,黄昏暖光,写实摄影"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'MAI-Image-2.6-Flash',
prompt: '一家古风茶馆的门面,木质招牌上写着「API易 欢迎」,红灯笼,黄昏暖光,写实摄影'
})
};
fetch('https://api.apiyi.com/v1/images/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.apiyi.com/v1/images/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'MAI-Image-2.6-Flash',
'prompt' => '一家古风茶馆的门面,木质招牌上写着「API易 欢迎」,红灯笼,黄昏暖光,写实摄影'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.apiyi.com/v1/images/generations"
payload := strings.NewReader("{\n \"model\": \"MAI-Image-2.6-Flash\",\n \"prompt\": \"一家古风茶馆的门面,木质招牌上写着「API易 欢迎」,红灯笼,黄昏暖光,写实摄影\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.apiyi.com/v1/images/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"MAI-Image-2.6-Flash\",\n \"prompt\": \"一家古风茶馆的门面,木质招牌上写着「API易 欢迎」,红灯笼,黄昏暖光,写实摄影\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apiyi.com/v1/images/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"MAI-Image-2.6-Flash\",\n \"prompt\": \"一家古风茶馆的门面,木质招牌上写着「API易 欢迎」,红灯笼,黄昏暖光,写实摄影\"\n}"
response = http.request(request)
puts response.read_body{
"created": 1790999642,
"data": [
{
"b64_json": "<string>"
}
],
"usage": {
"prompt_tokens": 1000,
"total_tokens": 1000,
"output_tokens": 0
}
}右側的互動式 Playground 支援直接線上除錯。請在 Authorization 中填入你的 API Key(格式:
Bearer sk-xxx),選擇 model、輸入 prompt,按需填 width / height 後一鍵傳送即可。場景說明:本頁用於「文本生成圖片」,只需提示詞。如果你要基於現有圖片做修改或雙圖融合,請使用 圖片編輯介面。
⚠️ 三個引數傳了就 400
response_format、seed、negative_prompt 本系列都不接受,傳入返回 400 Invalid parameters: xxx。從 gpt-image / DALL·E 遷移的程式碼請先刪掉 response_format——返回值固定是 data[0].b64_json。⚠️ 尺寸用 width + height,不用 size本端點傳
size 會被靜默忽略,恆出 1024×1024。請改用整數 width + height(必須成對),每維 ≥ 768、寬×高 ≤ 2,359,296(1536×1536 面積)。圖片 API 全部為同步呼叫:沒有非同步任務 ID,客戶端斷開連線結果即丟失、但請求仍會計費。1024×1024 出圖 Flash 約 17 秒、2.6 約 30 秒,建議客戶端超時 Flash ≥ 120 秒、2.6 ≥ 180 秒,詳見 圖片 API 呼叫須知與最佳實踐。
程式碼示例
Python(OpenAI SDK)
from openai import OpenAI
import base64
client = OpenAI(
api_key="sk-your-api-key",
base_url="https://api.apiyi.com/v1",
timeout=180.0 # 同步呼叫,超時要給足
)
resp = client.images.generate(
model="MAI-Image-2.6-Flash",
prompt="一家古風茶館的門面,木質招牌上寫著「API易 歡迎」,紅燈籠,黃昏暖光,寫實攝影",
# width / height 不是 OpenAI SDK 的標準欄位,要放進 extra_body
# 不要傳 response_format,會 400
extra_body={"width": 1024, "height": 1024}
)
with open("out.png", "wb") as f:
f.write(base64.b64decode(resp.data[0].b64_json))
Python(原生 requests)
import base64
import os
import requests
response = requests.post(
"https://api.apiyi.com/v1/images/generations",
headers={"Authorization": f"Bearer {os.environ['APIYI_API_KEY']}"},
json={
"model": "MAI-Image-2.6",
"prompt": "A red fox sitting on a mossy rock in a misty forest, soft morning light, photorealistic",
"width": 1536,
"height": 1024
},
timeout=180
)
response.raise_for_status()
with open("out.png", "wb") as f:
f.write(base64.b64decode(response.json()["data"][0]["b64_json"]))
cURL
curl -X POST "https://api.apiyi.com/v1/images/generations" \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "MAI-Image-2.6-Flash",
"prompt": "一張極簡風格的咖啡店海報,頂部大字寫著「秋日限定」,暖棕配色",
"width": 1024,
"height": 1536
}' | python3 -c "import sys,json,base64; open('out.png','wb').write(base64.b64decode(json.load(sys.stdin)['data'][0]['b64_json']))"
Node.js(原生 fetch)
import fs from 'node:fs';
const resp = await fetch('https://api.apiyi.com/v1/images/generations', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.APIYI_API_KEY}`
},
body: JSON.stringify({
model: 'MAI-Image-2.6-Flash',
prompt: 'A serene Japanese garden with cherry blossoms, koi pond, golden hour',
width: 1792,
height: 1008 // 16:9,寬×高不超過 2,359,296
}),
signal: AbortSignal.timeout(120000)
});
const data = await resp.json();
fs.writeFileSync('out.png', Buffer.from(data.data[0].b64_json, 'base64'));
一次要多張:併發請求
文生圖介面每次只返回 1 張(n 無效),要多張就併發:
import base64, os, requests
from concurrent.futures import ThreadPoolExecutor
def gen(i):
r = requests.post(
"https://api.apiyi.com/v1/images/generations",
headers={"Authorization": f"Bearer {os.environ['APIYI_API_KEY']}"},
json={"model": "MAI-Image-2.6-Flash", "prompt": "a watercolor lighthouse at dusk"},
timeout=120
)
r.raise_for_status()
open(f"out-{i}.png", "wb").write(base64.b64decode(r.json()["data"][0]["b64_json"]))
with ThreadPoolExecutor(max_workers=4) as pool:
list(pool.map(gen, range(4)))
引數說明速查
| 引數名 | 型別 | 必填 | 預設 | 說明 |
|---|---|---|---|---|
model | string | ✅ | — | MAI-Image-2.6($0.12/張)或 MAI-Image-2.6-Flash($0.06/張),大小寫敏感 |
prompt | string | ✅ | — | 提示詞,支援中英文。要出現在圖裡的文字用引號括起來 |
width | integer | ❌ | 1024 | 輸出寬度。≥ 768,與 height 必須成對,非 16 倍數向下取整 |
height | integer | ❌ | 1024 | 輸出高度。≥ 768,寬×高 ≤ 2,359,296 |
response_format | — | — | — | 傳入返回 400,返回值固定為 b64_json |
seednegative_prompt | — | — | — | 傳入返回 400 |
size | — | — | — | 本端點靜默忽略 |
n | — | — | — | 本端點無效,恆出 1 張 |
quality、output_format、background、style 等 OpenAI 習慣欄位會被靜默忽略,輸出恆為 PNG。響應格式
{
"created": 1790999642,
"data": [
{
"b64_json": "iVBORw0KGgoAAAANSUhEUgAABAAAAAQACAIAAADwf7zU..."
}
],
"usage": {
"prompt_tokens": 1000,
"total_tokens": 1000,
"input_tokens": 1000,
"output_tokens": 0
}
}
響應欄位說明
b64_json是純 base64,不帶data:image/png;base64,字首,可直接解碼,解碼後為 PNG。- 沒有
url欄位,也不返回revised_prompt。 - 1024×1024 的 PNG 約 1.5–1.7 MB,base64 後響應體約 2.1–2.3 MB;1536×1536 約 4–5 MB,注意客戶端的響應體大小限制。
usage 不能用來核賬:prompt_tokens 恆為 1000 × 張數、output_tokens 恆為 0,是佔位值。本系列按張固定計費,真實扣費請以 API易 控制台賬單為準。授權
在 API易控制台获取的 API Key
主體
application/json
模型 ID(大小写敏感)。2.6 画质优先,Flash 速度优先
可用選項:
MAI-Image-2.6-Flash, MAI-Image-2.6 提示词,支持中英文。要出现在图里的文字用引号括起来
範例:
"一家古风茶馆的门面,木质招牌上写着「API易 欢迎」,红灯笼,黄昏暖光,写实摄影"
输出宽度(像素)。每维 ≥ 768,宽×高 ≤ 2,359,296(1536×1536 面积),
必须与 height 成对传入;非 16 倍数向下取整。
必填範圍:
x >= 768範例:
1024
输出高度(像素),规则同 width
必填範圍:
x >= 768範例:
1024
這個頁面有幫助嗎?