跳转至

图片生成(Gemini原生协议)

1. 概述

google推出的文生图/图生图模型。

2. 请求说明

  • 请求方法:POST
  • 请求地址:

    https://gateway.serevixai.ai/v1/v1beta/models/{model}:generateContent
    

3. 请求参数

3.1 Header 参数

参数名称 类型 必填 说明 示例值
Content-Type string 设置请求头类型,必须为 application/json application/json
Authorization string 身份验证所需的 API_KEY,格式 Bearer $YOUR_API_KEY Bearer $YOUR_API_KEY

3.2 Body 参数 (application/json)

参数名称 类型 必填 说明 示例
contents array 与模型当前对话的内容。对于单轮查询,这是单个实例。对于多轮查询(例如聊天),这是包含对话历史记录和最新请求的重复字段。 [{"role":"user","parts":[{"text":"A cute baby sea otter"}]}]
content.role string 消息角色。必须是usermodel user
content.parts array 构成单条消息的有序 Parts。部分可能具有不同的 MIME 类型。 [{"text":"A cute baby sea otter"}]}]
content.parts.text string 内嵌文本。 A cute baby sea otter
content.parts.inlineData struct 内嵌媒体字节。
content.parts.inlineData.mimeType string 来源数据的 IANA 标准 MIME 类型。 image/png
content.parts.inlineData.data string 媒体格式的原始字节。使用 base64 编码的字符串。
generationConfig struct 模型生成和输出的配置选项。
generationConfig.imageConfig struct 图片生成配置。如果为不支持这些配置选项的模型设置此字段,系统将返回错误。
generationConfig.imageConfig.aspectRatio string 可选。要生成的图片的宽高比。支持的宽高比:1:1 2:3 3:2 3:4 4:3 9:16 16:9 21:9 16:9
generationConfig.imageConfig.imageSize string 指定生成图片的大小。支持的值为 1K2K4K 1K

4. 请求示例

4.1 文生图

POST /v1/v1beta/models/gemini-2.5-flash-image:generateContent
Content-Type: application/json
Accept: application/json
Authorization: Bearer $YOUR_API_KEY

{
    "contents": [{
        "role": "user",
        "parts": [{
            "text": "A cute baby sea otter"
        }]
    }],
    "generationConfig": {
        "imageConfig": {
            "aspectRatio": "4:3",
            "imageSize": "1K"
        }
    }
}
curl https://gateway.serevixai.ai/v1/v1beta/models/gemini-2.5-flash-image:generateContent \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -H "Authorization: Bearer $YOUR_API_KEY" \
    -d "{
    \"contents\": [{
        \"role\": \"user\",
        \"parts\": [{
            \"text\": \"A cute baby sea otter\"
        }]
    }],
    \"generationConfig\": {
        \"imageConfig\": {
            \"aspectRatio\": \"4:3\",
            \"imageSize\": \"1K\"
        }
    }
}"
package main

import (
    "context"
    "fmt"
    "os"

    "google.golang.org/genai"
)

func main() {

    apiKey := "sk-123456789012345678901234567890123456789012345678"
    exampleFilePath := "example.png"

    client, err := genai.NewClient(
        context.Background(),
        &genai.ClientConfig{
            APIKey:  apiKey,
            Backend: genai.BackendGeminiAPI,
            HTTPOptions: genai.HTTPOptions{
                BaseURL: "https://gateway.serevixai.ai",
            },
        })
    if err != nil {
        fmt.Println("error creating client:", err)
        return
    }

    resp, err := client.Models.GenerateContent(
        context.Background(),
        "gemini-2.5-flash-image",
        []*genai.Content{
            {
                Role: "user",
                Parts: []*genai.Part{
                    {Text: "A cute baby sea otter"},
                },
            },
        },
        &genai.GenerateContentConfig{
            ImageConfig: &genai.ImageConfig{
                AspectRatio: "4:3",
                ImageSize:   "1K",
            },
        },
    )
    if err != nil {
        fmt.Println("error:", err)
        return
    }

    var imageData []byte
    for _, candidate := range resp.Candidates {
        for _, part := range candidate.Content.Parts {
            if part.InlineData != nil && part.InlineData.MIMEType == "image/png" {
                imageData = part.InlineData.Data
                break
            }
        }
        if imageData != nil {
            break
        }
    }

    if imageData == nil {
        fmt.Println("error: no image data found")
        return
    }

    if err := os.WriteFile(exampleFilePath, imageData, 0644); err != nil {
        fmt.Println("error:", err)
        return
    }

    fmt.Println("success to write to file", exampleFilePath)
}
#!/usr/bin/env python3

from google import genai

def main():
    api_key = "sk-123456789012345678901234567890123456789012345678"
    example_file_path = "example.png"

    client = genai.Client(
        api_key=api_key,
        http_options={
            "base_url": "https://gateway.serevixai.ai"
        }
    )

    response = client.models.generate_content(
        model="gemini-2.5-flash-image",
        contents="A cute baby sea otter",
        config=genai.types.GenerateContentConfig(
            image_config=genai.types.ImageConfig(
                aspect_ratio="4:3",
                image_size="1K"
            )
        )
    )

    image_data = None
    for candidate in response.candidates:
        for part in candidate.content.parts:
            if part.inline_data and part.inline_data.mime_type == "image/png":
                image_data = part.inline_data.data
                break
        if image_data:
            break

    if not image_data:
        print("error: no image data found")
        return

    with open(example_file_path, "wb") as f:
        f.write(image_data)

    print(f"success to write to file {example_file_path}")

if __name__ == "__main__":
    main()

4.2 图生图

支持的内联图片类型 `image/png` `image/jpeg` `image/webp` `image/heic` `image/heif`
POST /v1/v1beta/models/gemini-2.5-flash-image:generateContent
Content-Type: application/json
Accept: application/json
Authorization: Bearer $YOUR_API_KEY

{
    "contents": [{
        "role": "user",
        "parts": [{
            "text": "add a rainbow"
        }, {
            "inlineData": {
                "mimeType": "image/png",
                "data": "..."
            }
        }]
    }],
    "generationConfig": {
        "imageConfig": {
            "aspectRatio": "4:3",
            "imageSize": "1K"
        }
    }
}
base64_image=$(base64 -i "Path/to/agi/image.png");
curl https://gateway.serevixai.ai/v1/v1beta/models/gemini-2.5-flash-image:generateContent \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -H "Authorization: Bearer $YOUR_API_KEY" \
    -d "{
    \"contents\": [{
        \"role\": \"user\",
        \"parts\": [{
            \"text\": \"add a rainbow\"
        }, {
            \"inlineData\": {
                \"mimeType\": \"image/png\",
                \"data\": \"${base64_image}\"
            }
        }]
    }],
    \"generationConfig\": {
        \"imageConfig\": {
            \"aspectRatio\": \"4:3\",
            \"imageSize\": \"1K\"
        }
    }
}"
package main

import (
    "context"
    "fmt"
    "os"

    "google.golang.org/genai"
)

func main() {

    apiKey := "sk-123456789012345678901234567890123456789012345678"
    inputPath := "example.png"
    outputPath := "example2.png"

    inputData, err := os.ReadFile(inputPath)
    if err != nil {
        fmt.Println("error:", err)
        return
    }

    client, err := genai.NewClient(
        context.Background(),
        &genai.ClientConfig{
            APIKey:  apiKey,
            Backend: genai.BackendGeminiAPI,
            HTTPOptions: genai.HTTPOptions{
                BaseURL: "https://gateway.serevixai.ai",
            },
        })
    if err != nil {
        fmt.Println("error:", err)
        return
    }

    resp, err := client.Models.GenerateContent(
        context.Background(),
        "gemini-2.5-flash-image",
        []*genai.Content{
            {
                Role: "user",
                Parts: []*genai.Part{
                    {Text: "add a rainbow"},
                    {
                        InlineData: &genai.Blob{
                            MIMEType: "image/png",
                            Data:     inputData,
                        },
                    },
                },
            },
        },
        &genai.GenerateContentConfig{
            ImageConfig: &genai.ImageConfig{
                AspectRatio: "4:3",
                ImageSize:   "1K",
            },
        },
    )
    if err != nil {
        fmt.Println("error:", err)
        return
    }

    var imageData []byte
    for _, candidate := range resp.Candidates {
        for _, part := range candidate.Content.Parts {
            if part.InlineData != nil && part.InlineData.MIMEType == "image/png" {
                imageData = part.InlineData.Data
                break
            }
        }
        if imageData != nil {
            break
        }
    }

    if imageData == nil {
        fmt.Println("error: no image data found")
        return
    }

    if err := os.WriteFile(outputPath, imageData, 0644); err != nil {
        fmt.Println("error:", err)
        return
    }

    fmt.Println("success to write to file", outputPath)
}
#!/usr/bin/env python3

from google import genai

def main():
    api_key = "sk-123456789012345678901234567890123456789012345678"
    input_path = "example.png"
    output_path = "example2.png"

    with open(input_path, "rb") as f:
        input_data = f.read()

    client = genai.Client(
        api_key=api_key,
        http_options={
            "base_url": "https://gateway.serevixai.ai"
        }
    )

    response = client.models.generate_content(
        model="gemini-2.5-flash-image",
        contents=[
            "add a rainbow",
            genai.types.Part(
                inline_data=genai.types.Blob(
                    mime_type="image/png",
                    data=input_data
                )
            )
        ],
        config=genai.types.GenerateContentConfig(
            image_config=genai.types.ImageConfig(
                aspect_ratio="4:3",
                image_size="1K"
            )
        )
    )

    image_data = None
    for candidate in response.candidates:
        for part in candidate.content.parts:
            if part.inline_data and part.inline_data.mime_type == "image/png":
                image_data = part.inline_data.data
                break
        if image_data:
            break

    if not image_data:
        print("error: no image data found")
        return

    with open(output_path, "wb") as f:
        f.write(image_data)

    print(f"success to write to file {output_path}")

if __name__ == "__main__":
    main()

5. 响应示例

{
  "candidates": [
    {
      "content": {
        "role": "model",
        "parts": [
          {
            "inlineData": {
              "mimeType": "image/png",
              "data": "..."
            }
          }
        ]
      },
      "finishReason": "STOP"
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 5,
    "candidatesTokenCount": 1290,
    "totalTokenCount": 1295,
    "trafficType": "ON_DEMAND",
    "promptTokensDetails": [
      {
        "modality": "TEXT",
        "tokenCount": 5
      }
    ],
    "candidatesTokensDetails": [
      {
        "modality": "IMAGE",
        "tokenCount": 1290
      }
    ]
  },
  "modelVersion": "gemini-2.5-flash-image",
  "createTime": "2025-12-02T05:44:30.324935Z",
  "responseId": "vmU2acfqE--ijeYP-9ykgAI"
}