跳转到主要内容

Documentation Index

Fetch the complete documentation index at: https://docs.apiyi.com/llms.txt

Use this file to discover all available pages before exploring further.

模型卡

模型官方模型名计费备注
Nano Banana Progemini-3-pro-image-preview固定按次 $0.09/次(约 0.63 元;叠加充值活动后约 0.55 元)质量最高
Nano Banana 2gemini-3.1-flash-image-preview按次 $0.055/次(推荐 4K 出图使用);或按量动态计费,2K 约 $0.04性价比
Nano Banana(第一代)gemini-2.5-flash-image固定按次 $0.02/次最便宜
完整价格对比、按次/按量计费与令牌选择建议,见 Nano Banana 系列价格总览

尺寸控制

  • 遵循原图比例:不传 aspectRatio 即可;在多图编辑场景里,以最后一张图的尺寸为准
  • 分辨率 imageSize:支持 1K / 2K / 4K
    • Nano Banana(第一代)仅支持 1K
    • Nano Banana 2 新增 512px
用同一套代码调用第一代 gemini-2.5-flash-image 时,必须去掉 imageSize 参数(它不支持 2K / 4K),否则会调用失败。

接入方式

官方文档

  • 谷歌官方文档:ai.google.dev/gemini-api/docs/image-generation
  • 接入 API易 只需把请求地址 + KEY 替换为 API易 的即可,其余参数与官方一致

端点支持

  • 推荐端点(Gemini 原生):https://api.apiyi.com/v1beta/models/gemini-3-pro-image-preview:generateContent
  • 支持 OpenAI 兼容模式调用(注意:不支持 URL 上传,需用 Base64)
  • 不支持 /v1/image/generations

开发格式(默认推荐)

  • 【推荐】使用谷歌原生端点格式
  • 图片:Base64 上传、下载转存
  • 调用方式:同步多线程调用,暂不支持异步调用

输入图片要求

  • 单图不能超过 7MB(谷歌规则);若通过 Google Cloud Storage 导入,单文件上限 30MB
  • 每个提示最多 14 张图
  • 支持的 MIME 类型image/pngimage/jpegimage/webpimage/heicimage/heifjpg 格式 API易 已兼容)
  • Base64 体积膨胀:图片转 Base64 后体积增加约 33.3%(7MB 的图约为 9.3MB)
  • API易 限制:单次请求上传图片总量需低于 100MB——均为同步调用,过大会导致内存爆炸
谷歌 Gemini 3 Pro Image 官方技术规范表:单图上限 7MB,每个提示最多 14 张图,支持的宽高比与 MIME 类型
Base64 体积计算说明:7MB 原图按 4/3 比例编码后约 9.33MB
最佳实践:传给接口前对图片做无损压缩,避免超大分辨率拖慢请求速度。 谷歌官方规格说明(请自行复制访问):docs.cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/3-pro-image

URL 图片输入说明

除了 Base64,Gemini 原生端点还支持通过 fileData.fileUri 直接传入图片 URL(图床 / OSS 地址),省去本地编码上传的步骤。
URL 上传对图床、OSS 地址的要求较高:如果不是全球 CDN(例如腾讯云对象存储默认走国内 CDN),很可能无法被谷歌服务器识别,进而请求失败(典型表现为不参考图)。如果条件允许,尽量用 Base64 方式上传,稳定性更高——在平台视角,这是通用能力上投入运维资源最多、最可靠的方式。
URL 上传仅在 Gemini 原生端点可用;OpenAI 兼容模式不支持 URL 上传,需改用 Base64。

Curl 示例(fileUri)

curl --location 'https://api.apiyi.com/v1beta/models/gemini-3-pro-image-preview:generateContent' \
  --header 'Authorization: Bearer sk-' \
  --header 'Content-Type: application/json' \
  --data '{
      "contents": [
          {
              "parts": [
                  {
                      "fileData": {
                          "fileUri": "https://raw.githubusercontent.com/apiyi-api/ai-api-code-samples/refs/heads/main/Vision-API-OpenAI/otter.png",
                          "mimeType": "image/png"
                      }
                  },
                  {
                      "text": "add five dogs"
                  }
              ],
              "role": "user"
          }
      ],
      "generationConfig": {"responseModalities": ["IMAGE"],
      "imageConfig": {
        "aspectRatio": "16:9",
        "imageSize": "2K"
      }},
      "safetySettings": []
  }'   > output.json

Python 示例(fileUri)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Gemini 3 Pro Image - 图片编辑(file_uri 最小化版本)
用途:仅用于快速验证接口可用性
"""

import requests
import base64
import json
from pathlib import Path
from datetime import datetime

# ============================================================================
# 配置区域
# ============================================================================

API_KEY = "sk-"
API_URL = "https://api.apiyi.com/v1beta/models/gemini-3-pro-image-preview:generateContent"

# 图片 URL
IMAGE_URL = "https://raw.githubusercontent.com/apiyi-api/ai-pics/refs/heads/main/1762260696217_dd0352c1f9604540.png"
IMAGE_MIME_TYPE = "image/png"

# 编辑指令
EDIT_PROMPT = "将照片中的人的衣服换成蓝色夹克,头发换成紫色渐变色,人物的动作、眼睛朝向等其他结构不变"
SYSTEM_PROMPT = "您是一位专业的图像描述和生成专家。您的任务是根据用户的请求,创作出细节丰富、艺术风格明确的高质量图像提示,或对现有图像进行准确、有创意的编辑。"

# 输出参数
ASPECT_RATIO = "9:16"
RESOLUTION = "4K"
MAX_OUTPUT_TOKENS = 8000
OUTPUT_FILE = f"minimal_{datetime.now().strftime('%Y%m%d_%H%M%S')}.png"

# ============================================================================
# 核心代码
# ============================================================================

def main():
    print("=" * 60)
    print("开始测试 file_uri 格式接口")
    print("=" * 60)
    print(f"图片 URL: {IMAGE_URL[:80]}...")
    print(f"编辑指令: {EDIT_PROMPT}")
    print(f"输出参数: {RESOLUTION}, {ASPECT_RATIO}")
    print("-" * 60)

    # 构建请求体
    # 注意:fileData、mimeType、fileUri 必须使用驼峰命名
    payload = {
        "generationConfig": {
            "responseModalities": ["IMAGE", "TEXT"],
            "imageConfig": {
                "imageSize": RESOLUTION,
                "aspectRatio": ASPECT_RATIO
            },
            "maxOutputTokens": MAX_OUTPUT_TOKENS
        },
        "contents": [
            {
                "role": "model",
                "parts": [{"text": SYSTEM_PROMPT}]
            },
            {
                "role": "user",
                "parts": [
                    {
                        "fileData": {           # 驼峰命名:fileData(不是 file_data)
                            "mimeType": IMAGE_MIME_TYPE,  # 驼峰命名:mimeType
                            "fileUri": IMAGE_URL          # 驼峰命名:fileUri
                        }
                    },
                    {"text": EDIT_PROMPT}
                ]
            }
        ]
    }

    # 发送请求
    print("\n正在发送请求...")
    try:
        response = requests.post(
            API_URL,
            json=payload,
            headers={
                "Content-Type": "application/json",
                "Authorization": f"Bearer {API_KEY}"
            },
            timeout=300
        )

        print(f"响应状态码: {response.status_code}")

        if response.status_code != 200:
            print(f"❌ 错误: {response.text}")
            return

        # 解析响应
        data = response.json()
        print("✅ 成功获取响应")

        # 保存完整响应(方便调试)
        with open(OUTPUT_FILE + ".response.json", "w", encoding="utf-8") as f:
            json.dump(data, f, indent=2, ensure_ascii=False)
        print(f"📄 响应已保存: {OUTPUT_FILE}.response.json")

        # 提取并打印文本
        parts = data["candidates"][0]["content"]["parts"]
        for part in parts:
            if "text" in part:
                print(f"\n💬 文本响应: {part['text']}")

        # 保存图片
        for part in parts:
            if "inlineData" in part or "inline_data" in part:
                image_data = part.get("inlineData", part.get("inline_data", {})).get("data")
                if image_data:
                    image_bytes = base64.b64decode(image_data)
                    with open(OUTPUT_FILE, "wb") as f:
                        f.write(image_bytes)
                    print(f"\n✅ 图片已保存: {OUTPUT_FILE}")
                    print(f"📦 文件大小: {len(image_bytes) / 1024:.1f} KB")
                    print(f"🔗 文件路径: {Path(OUTPUT_FILE).resolve()}")
                    return

        print("⚠️  响应中未找到图片数据")

    except requests.Timeout:
        print("❌ 请求超时")
    except Exception as e:
        print(f"❌ 错误: {e}")

if __name__ == "__main__":
    main()
    print("\n" + "=" * 60)
    print("测试结束")
    print("=" * 60)
fileDatamimeTypefileUri 必须使用驼峰命名(不是 file_data / file_uri),否则参数不生效、表现为不参考图。

计费基础(重要)

  • 同步调用耗时:Pro / 2 在 4K 下的合理生成时间约 30–150s
  • 超时主动断开仍计费:例如生成需 120s,但客户端把超时设为 100s 主动断开,仍会计费
  • 429 / 503 不收费:请求不通时不计费(我们尽量不让客户久等、不卡死迟迟不出图)
  • 内容安全拒绝仍计费:客户输入存在内容安全问题、谷歌拒绝出图时,状态码 200 仍会计费——详见下方错误处理与保障计划

超时设置(重要)

4K 出图的整体耗时较长,包含图片上传、API 处理、Base64 图片下载等环节(我们后台按 API 处理用时计费)。正常情况下 4K 用时约 50s(不含轮询),但客户端若把超时设得过短,就会在出图完成前主动断开并报错:
API Connection Error: HTTPSConnectionPool(host='api.apiyi.com', port=443): Read timed out. (read timeout=120)
调用日志:gemini-3-pro 4K 出图首字节耗时 43 到 61 秒
为更保险,建议按分辨率设置超时时间:
timeout = {
    "1K": 300,  # 5 分钟 - 快速预览
    "2K": 300,  # 5 分钟 - 推荐使用
    "4K": 600,  # 10 分钟 - 超高清
}

常见问题

错误处理指南

出图失败的三大判断指标、内容审核政策与友好提示方案

常见开发问题必读

出图失败排查与常见疑问

出图失败保障计划

非主观原因导致的失败,按条数核算后补发额度

应用场景

  • AI 对话客户端Cherry Studio 等客户端可直接配置 API易 出图
  • 出图测试:可在对话客户端或控制台快速验证模型效果

高级需求

  • 图片上传想用 URL? Gemini 原生端点支持通过 fileData.fileUri 传入图片 URL;但 OpenAI 兼容模式不支持 URL 上传,需改用 Base64。代码示例与注意事项见上文 URL 图片输入说明
  • 图片下载想直接拿到 URL(而非 Base64)? 使用 NB-OSS 分组——详见 Nano Banana OSS 分组