Skip to main content

模型介绍

gemini-3.1-flash-image-preview

Nano Banana 2 (官方名称)
• 响应速度快
• 适合批量生成
• 支持文生图、图生图、多图融合
• 主打速度与主流高质量,目前的默认模型

模型映射关系

内部代号官方/API 名称特点
Nano Banana 2gemini-3.1-flash-image-preview主打速度与主流高质量,目前的默认模型
Nano Banana Progemini-3-pro-image-preview主打极致质量,Pro/高级选项

API 端点

POST https://api.xxx.com/v1/images/generations

认证方式

使用 Bearer Token 认证:
Authorization: Bearer sk-xxxx

请求格式

文生图

通过文本描述生成图片。
curl --location --request POST 'https://api.xxx.com/v1/images/generations' \
--header 'Authorization: Bearer sk-xxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
    "model": "gemini-3.1-flash-image-preview",
    "prompt": "请为黑客帝国设计一张高品质的3D海报,需要先检索影视剧/小说信息和著名的片段场景。首先,请利用你的知识库检索这个影视剧/小说的内容,找出一个最具代表性的名场面或核心地点。在画面中央,将这个场景构建为一个精致的轴侧视角3D微缩模型。风格要采用梦工厂动画那种细腻、柔和的渲染风格。你需要还原当时的建筑细节、人物动态以及环境氛围,无论是暴风雨还是宁静的午后,都要自然地融合在模型的光影里。关于背景,不要使用简单的纯白底。请在模型周围营造一种带有淡淡水墨晕染和流动光雾的虚空环境,色调雅致,让画面看起来有呼吸感和纵深感,衬托出中央模型的珍贵。最后是底部的排版,请生成中文文字。居中写上小说名称,字体要有与原著风格匹配的设计感。在书名下方,自动检索并排版一句原著中关于该场景的经典描写或台词,字体使用优雅的衬线体。整体布局要像一个高级的博物馆藏品铭牌那样精致平衡。",
    "size": "1:1",
    "resolution": "1K",
    "n": 1
}'

图生图

基于输入图片生成新图片,支持 URL 和 Base64 格式。

URL 格式

{
    "model": "gemini-3.1-flash-image-preview",
    "prompt": "将这张图转换为油画风格",
    "image_urls": ["https://example.com/image.jpg"],
    "size": "1:1",
    "resolution": "1K",
    "n": 1
}

Base64 格式

{
    "model": "gemini-3.1-flash-image-preview",
    "prompt": "将这张图转换为油画风格",
    "image_urls": ["data:image/jpeg;base64,/9j/4AAQSkZJRg..."],
    "size": "1:1",
    "resolution": "1K",
    "n": 1
}

多图融合

融合多张图片的特征生成新图片。
{
    "model": "gemini-3.1-flash-image-preview",
    "prompt": "将图1的服装换为图2的服装",
    "image_urls": [
        "https://example.com/image1.jpg",
        "https://example.com/image2.jpg"
    ],
    "size": "1:1",
    "resolution": "1K",
    "n": 1
}

参数说明

请求参数

参数名类型必填说明默认值/可选值
modelstring模型名称gemini-3.1-flash-image-preview
promptstring文本提示词支持中英文,建议详细描述
image_urlsarray输入图片URL列表支持URL和Base64格式
sizestring图片尺寸比例1:1, 16:9, 9:16
resolutionstring分辨率1K, 2K, 4K
ninteger生成图片数量默认为 1

image_urls 格式说明

支持两种格式:
  1. URL 格式
    • 公开可访问的图像URL(http:// 或 https://)
    • 示例:https://example.com/image.jpg
  2. Base64 格式
    • 必须使用完整的 Data URI 格式
    • 格式:data:image/{格式};base64,{base64数据}
    • 支持的图片格式:jpeg、png、webp
    • 示例:data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABg...
限制:
  • 最多 14 张参考图(建议:最多 10 张物体参考 + 4 张角色参考)
  • 单张图片不超过 10MB
  • 支持格式:jpeg、png、webp

任务查询

图片生成是异步任务,提交后需要通过任务ID查询结果。

查询任务状态

curl --location --request GET 'https://task.artsmcp.com/{task_id}' \
--header 'Accept: */*'

响应示例

{
    "code": 200,
    "data": {
        "actual_time": 69,
        "completed": 1772274674,
        "created": 1772274605,
        "estimated_time": 100,
        "id": "task_01KJHWRQJDDA7NYJQPVV2S1VPN",
        "progress": 100,
        "result": {
            "images": [
                {
                    "expires_at": 1772361074,
                    "url": [
                        "https://upload.apimart.ai/f/image/9998227725327692-9a33be2a-d4b8-4f67-94da-9200a1bc2782-1772274672269791268_0.png"
                    ]
                }
            ]
        },
        "status": "completed"
    }
}

状态码说明

状态说明
submitted任务已提交
processing正在处理中
completed任务已完成
failed任务失败

使用示例

Python 完整示例

import requests
import json
import time

class GeminiFlashClient:
    def __init__(self, api_key):
        self.api_key = api_key
        self.base_url = "https://api.xxx.com/v1/images/generations"
        self.task_url = "https://task.artsmcp.com"
        
    def generate_image(self, prompt, size="1:1", resolution="1K", n=1):
        """生成图片"""
        headers = {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json"
        }
        
        data = {
            "model": "gemini-3.1-flash-image-preview",
            "prompt": prompt,
            "size": size,
            "resolution": resolution,
            "n": n
        }
        
        response = requests.post(self.base_url, headers=headers, json=data)
        result = response.json()
        
        if result["code"] == 200:
            task_id = result["data"][0]["task_id"]
            return self.wait_for_completion(task_id)
        else:
            raise Exception(f"API Error: {result}")
    
    def wait_for_completion(self, task_id, max_wait=300):
        """等待任务完成"""
        url = f"{self.task_url}/{task_id}"
        start_time = time.time()
        
        while time.time() - start_time < max_wait:
            response = requests.get(url)
            result = response.json()
            
            if result["data"]["status"] == "completed":
                return result["data"]["result"]["images"][0]["url"][0]
            elif result["data"]["status"] == "failed":
                raise Exception("Task failed")
            
            time.sleep(5)  # 每5秒查询一次
            
        raise Exception("Task timeout")

# 使用示例
client = GeminiFlashClient("sk-your-api-key")
image_url = client.generate_image("一只可爱的猫咪,卡通风格")
print(f"生成的图片URL: {image_url}")

注意事项

  • 返回的图片URL通常有24小时的有效期,请及时下载保存
  • Base64格式需要包含完整的 data:image/...;base64, 前缀
  • 单张图片大小限制为10MB
  • 最多支持14张参考图片
推荐实践:
  • 对于批量生成,建议设置合理的间隔时间避免频率限制
  • 详细的提示词能获得更好的生成效果
  • 图生图时建议保持参考图和提示词的一致性