从写代码,到创作下一幕

探索 字节跳动 - 火山方舟 的 AI 编程与视频创作活动。

火山方舟 Agent Plan 与 Coding Plan 活动,价格 ¥9.9 起

Agent Plan & Coding Plan

一站体验多款热门模型,为 AI 编程与智能体开发提供更多选择。新用户可联系(微信: goo_lvyouyou)免费体验 9.9 agent plan。

查看套餐优惠
Seedance 2.5 视频创作活动:30 秒视频、多模态参考、局部编辑

Seedance 2.5

让创意,跃然成片。探索 30 秒视频、多模态参考与局部编辑,把脑海中的画面变成下一支作品。

探索视频创作

模型能力

图像生成

查看 Markdown

使用 Grok Imagine 模型根据文本 prompt 生成图像。API 支持批量生成多张图像,并可控制宽高比、分辨率和质量。


快速开始

通过一次 API 调用生成图像:

import { xai } from "@ai-sdk/xai";
import { generateImage } from "ai";

const { image } = await generateImage({
    model: xai.image("grok-imagine-image-2.0"),
    prompt: "A collage of London landmarks in a stenciled street‑art style",
});

console.log(image.base64);

图像默认以 URL 形式返回。URL 是临时的,因此请及时下载或处理。你也可以请求 base64 输出,以便直接嵌入图像。


配置

多张图像

通过 n 参数(1–10)在单次请求中生成多张图像。在 REST API 和兼容 OpenAI 的 SDK 中,n 为可选参数,默认值为 1。xAI Python SDK 使用 sample() 生成单张图像,使用 sample_batch(n=...) 生成多张图像——n 必须提供给 sample_batch()。

import { xai } from "@ai-sdk/xai";
import { generateImage } from "ai";

const { images } = await generateImage({
    model: xai.image("grok-imagine-image-2.0"),
    prompt: "A futuristic city skyline at night",
    n: 4,
});

images.forEach((image, i) => {
    console.log(`Variation ${i + 1}: ${image.base64.slice(0, 50)}...`);
});

宽高比

使用 aspect_ratio 参数。省略时默认为 auto,由模型根据 prompt 选择最佳宽高比。

比例用例
1:1社交媒体、缩略图
16:9 / 9:16宽屏、移动端、故事
4:3 / 3:4演示文稿、人像
3:2 / 2:3摄影
2:1 / 1:2横幅、页眉
19.5:9 / 9:19.5现代智能手机屏幕(iPhone)
20:9 / 9:20现代智能手机屏幕(Android)
21:9电影宽银幕
5:2宽幅横幅
auto模型自动为提示词选择最佳比例
import { xai } from "@ai-sdk/xai";
import { generateImage } from "ai";

const { image } = await generateImage({
    model: xai.image("grok-imagine-image-2.0"),
    prompt: "Mountain landscape at sunrise",
    aspectRatio: "16:9",
});

console.log(image.base64);

分辨率

你可以通过 resolution 参数指定输出图像的分辨率。目前支持的图像分辨率包括:

  • 1k(省略时的默认值)

  • 2k

import { xai } from "@ai-sdk/xai";
import { generateImage } from "ai";

const { image } = await generateImage({
    model: xai.image("grok-imagine-image-2.0"),
    prompt: "An astronaut performing EVA in LEO.",
    providerOptions: {
        xai: { resolution: "2k" },
    },
});

console.log(image.base64);

质量

使用可选的 quality 参数控制生成质量。允许的值为 low、medium 和 auto。省略时默认值为 auto,由服务为每次请求选择质量。目前 Auto 使用 low 生成图像,并使用 medium 进行图像编辑。图像按实际提供的质量计费(参阅价格)。传入 low 或 medium 可固定使用特定质量。该参数仅支持 grok-imagine-image-2.0。

curl -X POST https://api.x.ai/v1/images/generations \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $XAI_API_KEY" \
  -d '{
    "model": "grok-imagine-image-2.0",
    "prompt": "A watercolor painting of a lighthouse at dawn",
    "quality": "low"
  }'

base64 输出

使用以下参数控制输出格式:response_format 参数。省略时默认为 url,返回临时托管 URL。如需直接嵌入图像而无需下载,请请求 base64:

import { xai } from "@ai-sdk/xai";
import { generateImage } from "ai";
import fs from "fs";

const { image } = await generateImage({
    model: xai.image("grok-imagine-image-2.0"),
    prompt: "A serene Japanese garden",
});

// Save to file (AI SDK returns base64 by default)
const imageBuffer = Buffer.from(image.base64, "base64");
fs.writeFileSync("garden.jpg", imageBuffer);

延迟生成

图像生成通常在单次请求内完成。对于耗时较长的批次,或希望避免长时间保持连接时,可以设置 deferred: true,适用端点为 /v1/images/generations 或 /v1/images/edits。请求会立即返回 request_id;随后轮询 GET /v1/images/{request_id} 以获取结果。延迟请求仅支持 response_format: "url"(默认值)。结果与延迟聊天补全的结果一同存储,保留 24 小时。

轮询响应中包含 status:

  • pending(HTTP 202):仍在生成

  • done(HTTP 200):data 和 usage 已填充,结构与同步响应一致

  • failed(HTTP 200):error 包含一个 code 和 message

import os
import time
import requests

headers = {
    "Authorization": f"Bearer {os.getenv('XAI_API_KEY')}",
    "Content-Type": "application/json",
}

# Step 1: Start generation
response = requests.post(
    "https://api.x.ai/v1/images/generations",
    headers=headers,
    json={
        "model": "grok-imagine-image-2.0",
        "prompt": "A serene Japanese garden",
        "deferred": True,
    },
)
request_id = response.json()["request_id"]

# Step 2: Poll for the result
while True:
    result = requests.get(
        f"https://api.x.ai/v1/images/{request_id}",
        headers={"Authorization": headers["Authorization"]},
    )
    data = result.json()

    if data["status"] == "done":
        print(f"Image URL: {data['data'][0]['url']}")
        break
    elif data["status"] == "failed":
        print(f"Generation failed: {data['error']['message']}")
        break
    else:
        print("Still processing...")
        time.sleep(5)

也可以注册 webhook 来接收 image.generation.completed、image.generation.failed、image.edit.completed 和 image.edit.failed 事件,无需轮询。

响应详情

除图像 URL 或 Base64 数据外,xAI SDK 还会在响应对象上提供额外元数据。

内容审核:检查生成的图像是否通过内容审核:

Python

if response.respect_moderation:
    print(response.url)
else:
    print("Image filtered by moderation")

模型:获取实际使用的模型(解析所有别名):

Python

print(f"Model: {response.model}")

并发请求

当你需要使用不同的提示词,例如并行生成互不相关的图像时,请使用 AsyncClient 搭配 asyncio.gather 并发发起请求。这比逐一发起请求快得多。

Python

import asyncio
import xai_sdk

async def generate_concurrently():
    client = xai_sdk.AsyncClient()

    # Each request uses a different prompt
    prompts = [
        "A futuristic city skyline at sunset",
        "A serene Japanese garden in winter",
        "An astronaut floating above Earth",
        "A medieval castle on a misty mountain",
    ]

    # Fire all requests concurrently
    tasks = [
        client.image.sample(
            prompt=prompt,
            model="grok-imagine-image-2.0",
        )
        for prompt in prompts
    ]

    results = await asyncio.gather(*tasks)

    for prompt, result in zip(prompts, results):
        print(f"{prompt}: {result.url}")

asyncio.run(generate_concurrently())


最后更新:2026 年 10 月 8 日