> ## Documentation Index
> Fetch the complete documentation index at: https://bianxieai.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Gemini image generation

> Generate images from prompts with Gemini generateContent

Image generation shares the Gemini `generateContent` endpoint. Replace `{model}` with an image-capable model ID from the [live model page](https://api.bianxie.ai/pricing).

| Field                                      | Type        | Required | Description                                     |
| ------------------------------------------ | ----------- | -------- | ----------------------------------------------- |
| `model`                                    | path string | Yes      | Image-capable Gemini model ID.                  |
| `contents`                                 | array       | Yes      | Input content, normally containing a text part. |
| `contents[].parts[].text`                  | string      | Yes      | Image prompt.                                   |
| `generationConfig.imageConfig.aspectRatio` | string      | No       | Output ratio such as `1:1`, `9:16`, or `16:9`.  |

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api.bianxie.ai/v1beta/models/your-model:generateContent" \
    -H "Authorization: Bearer API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "contents": [{
        "role": "user",
        "parts": [{"text": "An orange cat in a space helmet, cinematic lighting"}]
      }],
      "generationConfig": {
        "imageConfig": {"aspectRatio": "1:1"}
      }
    }'
  ```

  ```python Python theme={null}
  import base64
  import requests

  response = requests.post(
      "https://api.bianxie.ai/v1beta/models/your-model:generateContent",
      headers={"Authorization": "Bearer API_KEY"},
      json={
          "contents": [{"role": "user", "parts": [{"text": "An orange cat in a space helmet"}]}],
          "generationConfig": {"imageConfig": {"aspectRatio": "1:1"}},
      },
      timeout=120,
  )
  response.raise_for_status()
  for candidate in response.json().get("candidates", []):
      for part in candidate.get("content", {}).get("parts", []):
          image = part.get("inlineData")
          if image and image.get("data"):
              open("output.png", "wb").write(base64.b64decode(image["data"]))
  ```

  ```javascript Node.js theme={null}
  import { writeFile } from "node:fs/promises";
  const response = await fetch("https://api.bianxie.ai/v1beta/models/your-model:generateContent", {
    method: "POST",
    headers: { Authorization: "Bearer API_KEY", "Content-Type": "application/json" },
    body: JSON.stringify({
      contents: [{ role: "user", parts: [{ text: "An orange cat in a space helmet" }] }],
      generationConfig: { imageConfig: { aspectRatio: "1:1" } }
    })
  });
  const data = await response.json();
  const image = data.candidates?.[0]?.content?.parts?.find((part) => part.inlineData)?.inlineData;
  if (image?.data) await writeFile("output.png", Buffer.from(image.data, "base64"));
  ```
</CodeGroup>

Read images from `candidates[].content.parts[].inlineData`. `mimeType` identifies the format and `data` contains Base64. A text part containing a Markdown data URL may appear as a compatibility fallback. Use a client timeout of at least 120 seconds and inspect finish and safety feedback when no image is returned.
