Generowanie obrazów za pomocą Nano Banana

Twórz prototypy w pełni funkcjonalnych aplikacji z kompletnym interfejsem użytkownika i zobacz, jak Nano Banana 2 jest zintegrowany z rzeczywistymi narzędziami, danymi i ekosystemem Gemini. A wszystko to bez pisania ani jednej linii kodu.
  • czasopismo londyn przywróć banan kawiarnia artykuł pies izometryczny,
  • czasopismo
    Wygenerowano za pomocą Nano Banana 2
    Prompt: „Zdjęcie błyszczącej okładki magazynu. Minimalistyczna niebieska okładka z dużym, pogrubionym napisem Nano Banana. Tekst jest napisany czcionką szeryfową i wypełnia widok. Bez żadnego innego tekstu. Przed tekstem znajduje się portret osoby w eleganckiej, minimalistycznej sukience. Kobieta trzyma w zabawny sposób cyfrę 2, która jest głównym punktem obrazu.
    W rogu umieść numer wydania i datę „luty 2026 r.” wraz z kodem kreskowym. Magazyn leży na półce przy pomarańczowej ścianie w markowym sklepie”.
  • londyn
    Wygenerowano za pomocą Nano Banana Pro
    Prompt: „Przedstaw wyraźną, izometryczną miniaturową scenę z kreskówki w 3D z widokiem z góry pod kątem 45° przedstawiającą Londyn z najbardziej charakterystycznymi zabytkami i elementami architektonicznymi. Używaj miękkich, dopracowanych tekstur z realistycznymi materiałami PBR oraz łagodnego, realistycznego oświetlenia i cieni. Zintegruj aktualne warunki pogodowe bezpośrednio ze środowiskiem miejskim, aby stworzyć wciągającą atmosferę. Użyj czystej, minimalistycznej kompozycji z miękkim, jednolitym tłem. U góry na środku umieść tytuł „Londyn” dużym, pogrubionym tekstem, pod nim widoczną ikonę pogody, a następnie datę (mały tekst) i temperaturę (średni tekst). Cały tekst musi być wyśrodkowany z zachowaniem spójnych odstępów i może nieznacznie nachodzić na górę budynków”.
    Dowiedz się więcej o groundingu w wyszukiwarce i wypróbuj go w AI Studio
  • quetzal
    Wygenerowano za pomocą Nano Banana 2
    Prompt: „Użyj wyszukiwarki obrazów, aby znaleźć dokładne zdjęcia kwezala herbowego. Utwórz piękną tapetę w formacie 3:2 z tym ptakiem, z naturalnym gradientem od góry do dołu i minimalistyczną kompozycją”.
    Korzystaj z funkcji wyszukiwania obrazem w Google z modelem Nano Banana 2. Wypróbuj w AI Studio
  • banan
    Wygenerowano za pomocą Nano Banana Pro
    Prompt: „Umieść to logo w reklamie perfum o zapachu banana z wyższej półki. Logo jest doskonale zintegrowane z butelką”.
  • kawiarnia
    Wygenerowano za pomocą Nano Banana Pro
    Prompt: „Zdjęcie przedstawiające codzienną scenę w tętniącej życiem kawiarni serwującej śniadania. Na pierwszym planie znajduje się mężczyzna z anime z niebieskimi włosami, jedna z osób jest szkicem ołówkowym, a druga to postać z animacji poklatkowej.
    Eksperymentuj z różnymi stylami artystycznymi za pomocą Nano Banana w AI Studio
  • artykuł
    Wygenerowano za pomocą Nano Banana Pro
    Prompt: „Użyj wyszukiwarki, aby dowiedzieć się, jak przyjęto wprowadzenie na rynek Gemini 3 Flash. Wykorzystaj te informacje, aby napisać krótki artykuł (z nagłówkami). Zwróć zdjęcie artykułu w formie, w jakiej ukazał się w eleganckim magazynie o designie. Jest to zdjęcie pojedynczej złożonej strony, na której widać artykuł o Gemini 3 Flash. jedno zdjęcie główne, Nagłówek w szeryfowej czcionce”.
    Generowanie dokładnego tekstu na podstawie wyszukiwania. Wypróbuj Nano Banana w AI Studio
  • pies
    Wygenerowano za pomocą Nano Banana Pro
    Prompt: „Ikona przedstawiająca uroczego psa. Tło jest białe. Ikony powinny być kolorowe i wyglądać jak trójwymiarowe. Brak tekstu”.
    Twórz ikony, naklejki i komponenty za pomocą Nano Banana w AI Studio
  • izometryczny,
    Wygenerowano za pomocą Nano Banana 2
    Prompt: „Utwórz zdjęcie, które będzie idealnie izometryczne. Nie jest to miniatura, tylko zrobione zdjęcie, które akurat jest idealnie izometryczne. To zdjęcie pięknego nowoczesnego ogrodu. Jest tam duży basen w kształcie cyfry 2 i napis „Nano Banana 2”.

Nano Banana to nazwa natywnych funkcji Gemini do generowania obrazów. Gemini może generować i przetwarzać obrazy w formie konwersacji za pomocą tekstu, obrazów lub kombinacji obu tych elementów. Dzięki temu możesz tworzyć, edytować i ulepszać obrazy z niespotykaną dotąd kontrolą.

Nano Banana to 3 różne modele dostępne w Gemini API:

  • Nano Banana 2: model Gemini 3.1 Flash Image Preview (gemini-3.1-flash-image-preview). Ten model jest odpowiednikiem modelu Gemini 3 Pro Image o wysokiej wydajności, zoptymalizowanym pod kątem szybkości i dużej liczby przypadków użycia przez deweloperów.
  • Nano Banana Pro: model Gemini 3 Pro – podgląd obrazu (gemini-3-pro-image-preview). Ten model został zaprojektowany do profesjonalnego tworzenia zasobów. Wykorzystuje zaawansowane wnioskowanie („Myślący”), aby wykonywać złożone instrukcje i renderować tekst o wysokiej wierności.
  • Nano Banana: model Gemini 2.5 Flash Image (gemini-2.5-flash-image). Ten model został zaprojektowany z myślą o szybkości i wydajności, a także zoptymalizowany pod kątem zadań o dużej objętości i krótkim czasie oczekiwania.

Wszystkie wygenerowane obrazy zawierają znak wodny SynthID.

Generowanie obrazów (zamiana tekstu na obraz)

Python

from google import genai
from google.genai import types
from PIL import Image

client = genai.Client()

prompt = ("Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme")
response = client.models.generate_content(
    model="gemini-3.1-flash-image-preview",
    contents=[prompt],
)

for part in response.parts:
    if part.text is not None:
        print(part.text)
    elif part.inline_data is not None:
        image = part.as_image()
        image.save("generated_image.png")

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

async function main() {

  const ai = new GoogleGenAI({});

  const prompt =
    "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme";

  const response = await ai.models.generateContent({
    model: "gemini-3.1-flash-image-preview",
    contents: prompt,
  });
  for (const part of response.candidates[0].content.parts) {
    if (part.text) {
      console.log(part.text);
    } else if (part.inlineData) {
      const imageData = part.inlineData.data;
      const buffer = Buffer.from(imageData, "base64");
      fs.writeFileSync("gemini-native-image.png", buffer);
      console.log("Image saved as gemini-native-image.png");
    }
  }
}

main();

Go

package main

import (
  "context"
  "fmt"
  "log"
  "os"
  "google.golang.org/genai"
)

func main() {

  ctx := context.Background()
  client, err := genai.NewClient(ctx, nil)
  if err != nil {
      log.Fatal(err)
  }

  result, _ := client.Models.GenerateContent(
      ctx,
      "gemini-3.1-flash-image-preview",
      genai.Text("Create a picture of a nano banana dish in a " +
                 " fancy restaurant with a Gemini theme"),
  )

  for _, part := range result.Candidates[0].Content.Parts {
      if part.Text != "" {
          fmt.Println(part.Text)
      } else if part.InlineData != nil {
          imageBytes := part.InlineData.Data
          outputFilename := "gemini_generated_image.png"
          _ = os.WriteFile(outputFilename, imageBytes, 0644)
      }
  }
}

Java

import com.google.genai.Client;
import com.google.genai.types.GenerateContentConfig;
import com.google.genai.types.GenerateContentResponse;
import com.google.genai.types.Part;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class TextToImage {
  public static void main(String[] args) throws IOException {

    try (Client client = new Client()) {
      GenerateContentConfig config = GenerateContentConfig.builder()
          .responseModalities("TEXT", "IMAGE")
          .build();

      GenerateContentResponse response = client.models.generateContent(
          "gemini-3.1-flash-image-preview",
          "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme",
          config);

      for (Part part : response.parts()) {
        if (part.text().isPresent()) {
          System.out.println(part.text().get());
        } else if (part.inlineData().isPresent()) {
          var blob = part.inlineData().get();
          if (blob.data().isPresent()) {
            Files.write(Paths.get("_01_generated_image.png"), blob.data().get());
          }
        }
      }
    }
  }
}

REST

curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{
      "parts": [
        {"text": "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme"}
      ]
    }]
  }'

Edytowanie obrazów (tekst i obraz na obraz)

Przypomnienie: upewnij się, że masz wymagane prawa do wszystkich przesyłanych obrazów. Nie twórz treści naruszających prawa innych osób, w tym filmów ani obrazów, które mogą zostać wykorzystane do oszustwa, nękania lub wyrządzania krzywdy. Korzystanie z tej usługi generatywnej AI podlega naszym Zasadom dotyczącym niedozwolonych zastosowań.

Prześlij obraz i użyj promptów tekstowych, aby dodać, usunąć lub zmodyfikować elementy, zmienić styl lub dostosować korekcję kolorów.

Poniższy przykład pokazuje przesyłanie obrazów zakodowanych w formacie base64. Więcej informacji o wielu obrazach, większych ładunkach i obsługiwanych typach MIME znajdziesz na stronie Rozumienie obrazów.

Python

from google import genai
from google.genai import types
from PIL import Image

client = genai.Client()

prompt = (
    "Create a picture of my cat eating a nano-banana in a "
    "fancy restaurant under the Gemini constellation",
)

image = Image.open("/path/to/cat_image.png")

response = client.models.generate_content(
    model="gemini-3.1-flash-image-preview",
    contents=[prompt, image],
)

for part in response.parts:
    if part.text is not None:
        print(part.text)
    elif part.inline_data is not None:
        image = part.as_image()
        image.save("generated_image.png")

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

async function main() {

  const ai = new GoogleGenAI({});

  const imagePath = "path/to/cat_image.png";
  const imageData = fs.readFileSync(imagePath);
  const base64Image = imageData.toString("base64");

  const prompt = [
    { text: "Create a picture of my cat eating a nano-banana in a" +
            "fancy restaurant under the Gemini constellation" },
    {
      inlineData: {
        mimeType: "image/png",
        data: base64Image,
      },
    },
  ];

  const response = await ai.models.generateContent({
    model: "gemini-3.1-flash-image-preview",
    contents: prompt,
  });
  for (const part of response.candidates[0].content.parts) {
    if (part.text) {
      console.log(part.text);
    } else if (part.inlineData) {
      const imageData = part.inlineData.data;
      const buffer = Buffer.from(imageData, "base64");
      fs.writeFileSync("gemini-native-image.png", buffer);
      console.log("Image saved as gemini-native-image.png");
    }
  }
}

main();

Go

package main

import (
 "context"
 "fmt"
 "log"
 "os"
 "google.golang.org/genai"
)

func main() {

 ctx := context.Background()
 client, err := genai.NewClient(ctx, nil)
 if err != nil {
     log.Fatal(err)
 }

 imagePath := "/path/to/cat_image.png"
 imgData, _ := os.ReadFile(imagePath)

 parts := []*genai.Part{
   genai.NewPartFromText("Create a picture of my cat eating a nano-banana in a fancy restaurant under the Gemini constellation"),
   &genai.Part{
     InlineData: &genai.Blob{
       MIMEType: "image/png",
       Data:     imgData,
     },
   },
 }

 contents := []*genai.Content{
   genai.NewContentFromParts(parts, genai.RoleUser),
 }

 result, _ := client.Models.GenerateContent(
     ctx,
     "gemini-3.1-flash-image-preview",
     contents,
 )

 for _, part := range result.Candidates[0].Content.Parts {
     if part.Text != "" {
         fmt.Println(part.Text)
     } else if part.InlineData != nil {
         imageBytes := part.InlineData.Data
         outputFilename := "gemini_generated_image.png"
         _ = os.WriteFile(outputFilename, imageBytes, 0644)
     }
 }
}

Java

import com.google.genai.Client;
import com.google.genai.types.Content;
import com.google.genai.types.GenerateContentConfig;
import com.google.genai.types.GenerateContentResponse;
import com.google.genai.types.Part;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class TextAndImageToImage {
  public static void main(String[] args) throws IOException {

    try (Client client = new Client()) {
      GenerateContentConfig config = GenerateContentConfig.builder()
          .responseModalities("TEXT", "IMAGE")
          .build();

      GenerateContentResponse response = client.models.generateContent(
          "gemini-3.1-flash-image-preview",
          Content.fromParts(
              Part.fromText("""
                  Create a picture of my cat eating a nano-banana in
                  a fancy restaurant under the Gemini constellation
                  """),
              Part.fromBytes(
                  Files.readAllBytes(
                      Path.of("src/main/resources/cat.jpg")),
                  "image/jpeg")),
          config);

      for (Part part : response.parts()) {
        if (part.text().isPresent()) {
          System.out.println(part.text().get());
        } else if (part.inlineData().isPresent()) {
          var blob = part.inlineData().get();
          if (blob.data().isPresent()) {
            Files.write(Paths.get("gemini_generated_image.png"), blob.data().get());
          }
        }
      }
    }
  }
}

REST

curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -d "{
      \"contents\": [{
        \"parts\":[
            {\"text\": \"'Create a picture of my cat eating a nano-banana in a fancy restaurant under the Gemini constellation\"},
            {
              \"inline_data\": {
                \"mime_type\":\"image/jpeg\",
                \"data\": \"<BASE64_IMAGE_DATA>\"
              }
            }
        ]
      }]
    }"

Wieloetapowa edycja obrazów

Kontynuuj generowanie i edytowanie obrazów w trybie konwersacyjnym. Czat lub rozmowa wieloetapowa to zalecany sposób iteracji obrazów. Poniższy przykład pokazuje prompta do wygenerowania infografiki na temat fotosyntezy.

Python

from google import genai
from google.genai import types

client = genai.Client()

chat = client.chats.create(
    model="gemini-3.1-flash-image-preview",
    config=types.GenerateContentConfig(
        response_modalities=['TEXT', 'IMAGE'],
        tools=[{"google_search": {}}]
    )
)

message = "Create a vibrant infographic that explains photosynthesis as if it were a recipe for a plant's favorite food. Show the \"ingredients\" (sunlight, water, CO2) and the \"finished dish\" (sugar/energy). The style should be like a page from a colorful kids' cookbook, suitable for a 4th grader."

response = chat.send_message(message)

for part in response.parts:
    if part.text is not None:
        print(part.text)
    elif image:= part.as_image():
        image.save("photosynthesis.png")

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

async function main() {
  const chat = ai.chats.create({
    model: "gemini-3.1-flash-image-preview",
    config: {
      responseModalities: ['TEXT', 'IMAGE'],
      tools: [{googleSearch: {}}],
    },
  });
}

await main();

const message = "Create a vibrant infographic that explains photosynthesis as if it were a recipe for a plant's favorite food. Show the \"ingredients\" (sunlight, water, CO2) and the \"finished dish\" (sugar/energy). The style should be like a page from a colorful kids' cookbook, suitable for a 4th grader."

let response = await chat.sendMessage({message});

for (const part of response.candidates[0].content.parts) {
    if (part.text) {
      console.log(part.text);
    } else if (part.inlineData) {
      const imageData = part.inlineData.data;
      const buffer = Buffer.from(imageData, "base64");
      fs.writeFileSync("photosynthesis.png", buffer);
      console.log("Image saved as photosynthesis.png");
    }
}

Go

package main

import (
    "context"
    "fmt"
    "log"
    "os"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }
    defer client.Close()

    model := client.GenerativeModel("gemini-3.1-flash-image-preview")
    model.GenerationConfig = &pb.GenerationConfig{
        ResponseModalities: []pb.ResponseModality{genai.Text, genai.Image},
    }
    chat := model.StartChat()

    message := "Create a vibrant infographic that explains photosynthesis as if it were a recipe for a plant's favorite food. Show the \"ingredients\" (sunlight, water, CO2) and the \"finished dish\" (sugar/energy). The style should be like a page from a colorful kids' cookbook, suitable for a 4th grader."

    resp, err := chat.SendMessage(ctx, genai.Text(message))
    if err != nil {
        log.Fatal(err)
    }

    for _, part := range resp.Candidates[0].Content.Parts {
        if txt, ok := part.(genai.Text); ok {
            fmt.Printf("%s", string(txt))
        } else if img, ok := part.(genai.ImageData); ok {
            err := os.WriteFile("photosynthesis.png", img.Data, 0644)
            if err != nil {
                log.Fatal(err)
            }
        }
    }
}

Java

import com.google.genai.Chat;
import com.google.genai.Client;
import com.google.genai.types.Content;
import com.google.genai.types.GenerateContentConfig;
import com.google.genai.types.GenerateContentResponse;
import com.google.genai.types.GoogleSearch;
import com.google.genai.types.ImageConfig;
import com.google.genai.types.Part;
import com.google.genai.types.RetrievalConfig;
import com.google.genai.types.Tool;
import com.google.genai.types.ToolConfig;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class MultiturnImageEditing {
  public static void main(String[] args) throws IOException {

    try (Client client = new Client()) {

      GenerateContentConfig config = GenerateContentConfig.builder()
          .responseModalities("TEXT", "IMAGE")
          .tools(Tool.builder()
              .googleSearch(GoogleSearch.builder().build())
              .build())
          .build();

      Chat chat = client.chats.create("gemini-3.1-flash-image-preview", config);

      GenerateContentResponse response = chat.sendMessage("""
          Create a vibrant infographic that explains photosynthesis
          as if it were a recipe for a plant's favorite food.
          Show the "ingredients" (sunlight, water, CO2)
          and the "finished dish" (sugar/energy).
          The style should be like a page from a colorful
          kids' cookbook, suitable for a 4th grader.
          """);

      for (Part part : response.parts()) {
        if (part.text().isPresent()) {
          System.out.println(part.text().get());
        } else if (part.inlineData().isPresent()) {
          var blob = part.inlineData().get();
          if (blob.data().isPresent()) {
            Files.write(Paths.get("photosynthesis.png"), blob.data().get());
          }
        }
      }
      // ...
    }
  }
}

REST

curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{
      "role": "user",
      "parts": [
        {"text": "Create a vibrant infographic that explains photosynthesis as if it were a recipe for a plants favorite food. Show the \"ingredients\" (sunlight, water, CO2) and the \"finished dish\" (sugar/energy). The style should be like a page from a colorful kids cookbook, suitable for a 4th grader."}
      ]
    }],
    "generationConfig": {
      "responseModalities": ["TEXT", "IMAGE"]
    }
  }'
Infografika wygenerowana przez AI na temat fotosyntezy
Infografika wygenerowana przez AI na temat fotosyntezy

Następnie możesz użyć tego samego czatu, aby zmienić język na grafice na hiszpański.

Python

message = "Update this infographic to be in Spanish. Do not change any other elements of the image."
aspect_ratio = "16:9" # "1:1","1:4","1:8","2:3","3:2","3:4","4:1","4:3","4:5","5:4","8:1","9:16","16:9","21:9"
resolution = "2K" # "512", "1K", "2K", "4K"

response = chat.send_message(message,
    config=types.GenerateContentConfig(
        image_config=types.ImageConfig(
            aspect_ratio=aspect_ratio,
            image_size=resolution
        ),
    ))

for part in response.parts:
    if part.text is not None:
        print(part.text)
    elif image:= part.as_image():
        image.save("photosynthesis_spanish.png")

JavaScript

const message = 'Update this infographic to be in Spanish. Do not change any other elements of the image.';
const aspectRatio = '16:9';
const resolution = '2K';

let response = await chat.sendMessage({
  message,
  config: {
    responseModalities: ['TEXT', 'IMAGE'],
    imageConfig: {
      aspectRatio: aspectRatio,
      imageSize: resolution,
    },
    tools: [{googleSearch: {}}],
  },
});

for (const part of response.candidates[0].content.parts) {
    if (part.text) {
      console.log(part.text);
    } else if (part.inlineData) {
      const imageData = part.inlineData.data;
      const buffer = Buffer.from(imageData, "base64");
      fs.writeFileSync("photosynthesis2.png", buffer);
      console.log("Image saved as photosynthesis2.png");
    }
}

Go

message = "Update this infographic to be in Spanish. Do not change any other elements of the image."
aspect_ratio = "16:9" // "1:1","1:4","1:8","2:3","3:2","3:4","4:1","4:3","4:5","5:4","8:1","9:16","16:9","21:9"
resolution = "2K"     // "512", "1K", "2K", "4K"

model.GenerationConfig.ImageConfig = &pb.ImageConfig{
    AspectRatio: aspect_ratio,
    ImageSize:   resolution,
}

resp, err = chat.SendMessage(ctx, genai.Text(message))
if err != nil {
    log.Fatal(err)
}

for _, part := range resp.Candidates[0].Content.Parts {
    if txt, ok := part.(genai.Text); ok {
        fmt.Printf("%s", string(txt))
    } else if img, ok := part.(genai.ImageData); ok {
        err := os.WriteFile("photosynthesis_spanish.png", img.Data, 0644)
        if err != nil {
            log.Fatal(err)
        }
    }
}

Java

String aspectRatio = "16:9"; // "1:1","1:4","1:8","2:3","3:2","3:4","4:1","4:3","4:5","5:4","8:1","9:16","16:9","21:9"
String resolution = "2K"; // "512", "1K", "2K", "4K"

config = GenerateContentConfig.builder()
    .responseModalities("TEXT", "IMAGE")
    .imageConfig(ImageConfig.builder()
        .aspectRatio(aspectRatio)
        .imageSize(resolution)
        .build())
    .build();

response = chat.sendMessage(
    "Update this infographic to be in Spanish. " + 
    "Do not change any other elements of the image.",
    config);

for (Part part : response.parts()) {
  if (part.text().isPresent()) {
    System.out.println(part.text().get());
  } else if (part.inlineData().isPresent()) {
    var blob = part.inlineData().get();
    if (blob.data().isPresent()) {
      Files.write(Paths.get("photosynthesis_spanish.png"), blob.data().get());
    }
  }
}

REST

curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": [
      {
        "role": "user",
        "parts": [{"text": "Create a vibrant infographic that explains photosynthesis..."}]
      },
      {
        "role": "model",
        "parts": [{"inline_data": {"mime_type": "image/png", "data": "<PREVIOUS_IMAGE_DATA>"}}]
      },
      {
        "role": "user",
        "parts": [{"text": "Update this infographic to be in Spanish. Do not change any other elements of the image."}]
      }
    ],
    "tools": [{"google_search": {}}],
    "generationConfig": {
      "responseModalities": ["TEXT", "IMAGE"],
      "imageConfig": {
        "aspectRatio": "16:9",
        "imageSize": "2K"
      }
    }
  }'
Infografika wygenerowana przez AI przedstawiająca fotosyntezę w języku hiszpańskim
Infografika wygenerowana przez AI przedstawiająca fotosyntezę w języku hiszpańskim

Nowości w modelach Gemini 3 Image

Gemini 3 oferuje najnowocześniejsze modele do generowania i edytowania obrazów. Model Gemini 3.1 Flash Image jest zoptymalizowany pod kątem szybkości i dużej liczby przypadków użycia, a model Gemini 3 Pro Image jest zoptymalizowany pod kątem profesjonalnego tworzenia zasobów. Zostały one zaprojektowane do wykonywania najbardziej wymagających przepływów pracy dzięki zaawansowanemu wnioskowaniu. Doskonale radzą sobie ze złożonymi zadaniami tworzenia i modyfikowania, które wymagają wielu interakcji.

  • Wyjście w wysokiej rozdzielczości: wbudowane funkcje generowania obrazów w rozdzielczości 1K, 2K i 4K.
    • Gemini 3.1 Flash Image dodaje mniejszą rozdzielczość 512 pikseli (0,5K).
  • Zaawansowane renderowanie tekstu: umożliwia generowanie czytelnego, stylizowanego tekstu do infografik, menu, diagramów i materiałów marketingowych.
  • Powiązanie ze źródłem informacji przy użyciu wyszukiwarki Google: model może używać wyszukiwarki Google jako narzędzia do weryfikowania faktów i generowania obrazów na podstawie danych w czasie rzeczywistym (np. aktualnych map pogody, wykresów akcji, ostatnich wydarzeń).
    • Gemini 3.1 Flash Image dodaje integrację powiązania ze źródłem informacji przy użyciu wyszukiwarki Google dla Grafiki oraz wyszukiwania w internecie.
  • Tryb myślenia: model wykorzystuje proces „myślenia”, aby analizować złożone prompty. Generuje tymczasowe „obrazy myśli” (widoczne w backendzie, ale nie są naliczane), aby dopracować kompozycję przed wygenerowaniem końcowego obrazu wysokiej jakości.
  • Do 14 obrazów referencyjnych: możesz teraz łączyć maksymalnie 14 obrazów referencyjnych, aby uzyskać obraz końcowy.
  • Nowe formaty obrazu: w wersji testowej Gemini 3.1 Flash Image Preview dodaliśmy formaty obrazu 1:4, 4:1, 1:8 i 8:1.

Używaj maksymalnie 14 obrazów referencyjnych

Modele obrazów Gemini 3 umożliwiają łączenie maksymalnie 14 obrazów referencyjnych. Te 14 obrazów może obejmować:

Gemini 3.1 Flash Image (wersja testowa) Gemini 3 Pro Image (wersja testowa)
Do 10 obrazów obiektów o wysokiej jakości, które mają zostać uwzględnione na obrazie końcowym Do 6 obrazów obiektów o wysokiej jakości, które mają zostać uwzględnione na obrazie końcowym
maksymalnie 4 obrazy postaci, aby zachować spójność postaci; Maksymalnie 5 obrazów postaci, aby zachować spójność postaci

Python

from google import genai
from google.genai import types
from PIL import Image

prompt = "An office group photo of these people, they are making funny faces."
aspect_ratio = "5:4" # "1:1","1:4","1:8","2:3","3:2","3:4","4:1","4:3","4:5","5:4","8:1","9:16","16:9","21:9"
resolution = "2K" # "512", "1K", "2K", "4K"

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.1-flash-image-preview",
    contents=[
        prompt,
        Image.open('person1.png'),
        Image.open('person2.png'),
        Image.open('person3.png'),
        Image.open('person4.png'),
        Image.open('person5.png'),
    ],
    config=types.GenerateContentConfig(
        response_modalities=['TEXT', 'IMAGE'],
        image_config=types.ImageConfig(
            aspect_ratio=aspect_ratio,
            image_size=resolution
        ),
    )
)

for part in response.parts:
    if part.text is not None:
        print(part.text)
    elif image:= part.as_image():
        image.save("office.png")

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

async function main() {

  const ai = new GoogleGenAI({});

  const prompt =
      'An office group photo of these people, they are making funny faces.';
  const aspectRatio = '5:4';
  const resolution = '2K';

const contents = [
  { text: prompt },
  {
    inlineData: {
      mimeType: "image/jpeg",
      data: base64ImageFile1,
    },
  },
  {
    inlineData: {
      mimeType: "image/jpeg",
      data: base64ImageFile2,
    },
  },
  {
    inlineData: {
      mimeType: "image/jpeg",
      data: base64ImageFile3,
    },
  },
  {
    inlineData: {
      mimeType: "image/jpeg",
      data: base64ImageFile4,
    },
  },
  {
    inlineData: {
      mimeType: "image/jpeg",
      data: base64ImageFile5,
    },
  }
];

const response = await ai.models.generateContent({
    model: 'gemini-3.1-flash-image-preview',
    contents: contents,
    config: {
      responseModalities: ['TEXT', 'IMAGE'],
      imageConfig: {
        aspectRatio: aspectRatio,
        imageSize: resolution,
      },
    },
  });

  for (const part of response.candidates[0].content.parts) {
    if (part.text) {
      console.log(part.text);
    } else if (part.inlineData) {
      const imageData = part.inlineData.data;
      const buffer = Buffer.from(imageData, "base64");
      fs.writeFileSync("image.png", buffer);
      console.log("Image saved as image.png");
    }
  }

}

main();

Go

package main

import (
    "context"
    "fmt"
    "log"
    "os"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }
    defer client.Close()

    model := client.GenerativeModel("gemini-3.1-flash-image-preview")
    model.GenerationConfig = &pb.GenerationConfig{
        ResponseModalities: []pb.ResponseModality{genai.Text, genai.Image},
        ImageConfig: &pb.ImageConfig{
            AspectRatio: "5:4",
            ImageSize:   "2K",
        },
    }

    img1, err := os.ReadFile("person1.png")
    if err != nil { log.Fatal(err) }
    img2, err := os.ReadFile("person2.png")
    if err != nil { log.Fatal(err) }
    img3, err := os.ReadFile("person3.png")
    if err != nil { log.Fatal(err) }
    img4, err := os.ReadFile("person4.png")
    if err != nil { log.Fatal(err) }
    img5, err := os.ReadFile("person5.png")
    if err != nil { log.Fatal(err) }

    parts := []genai.Part{
        genai.Text("An office group photo of these people, they are making funny faces."),
        genai.ImageData{MIMEType: "image/png", Data: img1},
        genai.ImageData{MIMEType: "image/png", Data: img2},
        genai.ImageData{MIMEType: "image/png", Data: img3},
        genai.ImageData{MIMEType: "image/png", Data: img4},
        genai.ImageData{MIMEType: "image/png", Data: img5},
    }

    resp, err := model.GenerateContent(ctx, parts...)
    if err != nil {
        log.Fatal(err)
    }

    for _, part := range resp.Candidates[0].Content.Parts {
        if txt, ok := part.(genai.Text); ok {
            fmt.Printf("%s", string(txt))
        } else if img, ok := part.(genai.ImageData); ok {
            err := os.WriteFile("office.png", img.Data, 0644)
            if err != nil {
                log.Fatal(err)
            }
        }
    }
}

Java

import com.google.genai.Client;
import com.google.genai.types.Content;
import com.google.genai.types.GenerateContentConfig;
import com.google.genai.types.GenerateContentResponse;
import com.google.genai.types.ImageConfig;
import com.google.genai.types.Part;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class GroupPhoto {
  public static void main(String[] args) throws IOException {

    try (Client client = new Client()) {
      GenerateContentConfig config = GenerateContentConfig.builder()
          .responseModalities("TEXT", "IMAGE")
          .imageConfig(ImageConfig.builder()
              .aspectRatio("5:4")
              .imageSize("2K")
              .build())
          .build();

      GenerateContentResponse response = client.models.generateContent(
          "gemini-3.1-flash-image-preview",
          Content.fromParts(
              Part.fromText("An office group photo of these people, they are making funny faces."),
              Part.fromBytes(Files.readAllBytes(Path.of("person1.png")), "image/png"),
              Part.fromBytes(Files.readAllBytes(Path.of("person2.png")), "image/png"),
              Part.fromBytes(Files.readAllBytes(Path.of("person3.png")), "image/png"),
              Part.fromBytes(Files.readAllBytes(Path.of("person4.png")), "image/png"),
              Part.fromBytes(Files.readAllBytes(Path.of("person5.png")), "image/png")
          ), config);

      for (Part part : response.parts()) {
        if (part.text().isPresent()) {
          System.out.println(part.text().get());
        } else if (part.inlineData().isPresent()) {
          var blob = part.inlineData().get();
          if (blob.data().isPresent()) {
            Files.write(Paths.get("office.png"), blob.data().get());
          }
        }
      }
    }
  }
}

REST

curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -d "{
      \"contents\": [{
        \"parts\":[
            {\"text\": \"An office group photo of these people, they are making funny faces.\"},
            {\"inline_data\": {\"mime_type\":\"image/png\", \"data\": \"<BASE64_DATA_IMG_1>\"}},
            {\"inline_data\": {\"mime_type\":\"image/png\", \"data\": \"<BASE64_DATA_IMG_2>\"}},
            {\"inline_data\": {\"mime_type\":\"image/png\", \"data\": \"<BASE64_DATA_IMG_3>\"}},
            {\"inline_data\": {\"mime_type\":\"image/png\", \"data\": \"<BASE64_DATA_IMG_4>\"}},
            {\"inline_data\": {\"mime_type\":\"image/png\", \"data\": \"<BASE64_DATA_IMG_5>\"}}
        ]
      }],
      \"generationConfig\": {
        \"responseModalities\": [\"TEXT\", \"IMAGE\"],
        \"imageConfig\": {
          \"aspectRatio\": \"5:4\",
          \"imageSize\": \"2K\"
        }
      }
    }"
Zdjęcie grupowe pracowników biura wygenerowane przez AI
Zdjęcie grupowe zespołu biurowego wygenerowane przez AI

Powiązanie ze źródłem informacji przy użyciu wyszukiwarki Google

Użyj wyszukiwarki Google, aby generować obrazy na podstawie informacji w czasie rzeczywistym, takich jak prognozy pogody, wykresy akcji czy ostatnie wydarzenia.

Pamiętaj, że podczas korzystania z powiązania ze źródłem informacji przy użyciu wyszukiwarki Google w przypadku generowania obrazów wyniki wyszukiwania oparte na obrazach nie są przekazywane do modelu generowania i są wykluczane z odpowiedzi (patrz Powiązanie ze źródłem informacji przy użyciu wyszukiwarki Google w przypadku obrazów).

Python

from google import genai
prompt = "Visualize the current weather forecast for the next 5 days in San Francisco as a clean, modern weather chart. Add a visual on what I should wear each day"
aspect_ratio = "16:9" # "1:1","1:4","1:8","2:3","3:2","3:4","4:1","4:3","4:5","5:4","8:1","9:16","16:9","21:9"

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.1-flash-image-preview",
    contents=prompt,
    config=types.GenerateContentConfig(
        response_modalities=['Text', 'Image'],
        image_config=types.ImageConfig(
            aspect_ratio=aspect_ratio,
        ),
        tools=[{"google_search": {}}]
    )
)

for part in response.parts:
    if part.text is not None:
        print(part.text)
    elif image:= part.as_image():
        image.save("weather.png")

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

async function main() {

  const ai = new GoogleGenAI({});

  const prompt = 'Visualize the current weather forecast for the next 5 days in San Francisco as a clean, modern weather chart. Add a visual on what I should wear each day';
  const aspectRatio = '16:9';
  const resolution = '2K';

const response = await ai.models.generateContent({
    model: 'gemini-3.1-flash-image-preview',
    contents: prompt,
    config: {
      responseModalities: ['TEXT', 'IMAGE'],
      imageConfig: {
        aspectRatio: aspectRatio,
        imageSize: resolution,
      },
    tools: [{ googleSearch: {} }]
    },
  });

  for (const part of response.candidates[0].content.parts) {
    if (part.text) {
      console.log(part.text);
    } else if (part.inlineData) {
      const imageData = part.inlineData.data;
      const buffer = Buffer.from(imageData, "base64");
      fs.writeFileSync("image.png", buffer);
      console.log("Image saved as image.png");
    }
  }

}

main();

Java

import com.google.genai.Client;
import com.google.genai.types.GenerateContentConfig;
import com.google.genai.types.GenerateContentResponse;
import com.google.genai.types.GoogleSearch;
import com.google.genai.types.ImageConfig;
import com.google.genai.types.Part;
import com.google.genai.types.Tool;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class SearchGrounding {
  public static void main(String[] args) throws IOException {

    try (Client client = new Client()) {
      GenerateContentConfig config = GenerateContentConfig.builder()
          .responseModalities("TEXT", "IMAGE")
          .imageConfig(ImageConfig.builder()
              .aspectRatio("16:9")
              .build())
          .tools(Tool.builder()
              .googleSearch(GoogleSearch.builder().build())
              .build())
          .build();

      GenerateContentResponse response = client.models.generateContent(
          "gemini-3.1-flash-image-preview", """
              Visualize the current weather forecast for the next 5 days
              in San Francisco as a clean, modern weather chart.
              Add a visual on what I should wear each day
              """,
          config);

      for (Part part : response.parts()) {
        if (part.text().isPresent()) {
          System.out.println(part.text().get());
        } else if (part.inlineData().isPresent()) {
          var blob = part.inlineData().get();
          if (blob.data().isPresent()) {
            Files.write(Paths.get("weather.png"), blob.data().get());
          }
        }
      }
    }
  }
}

REST

curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{"parts": [{"text": "Visualize the current weather forecast for the next 5 days in San Francisco as a clean, modern weather chart. Add a visual on what I should wear each day"}]}],
    "tools": [{"google_search": {}}],
    "generationConfig": {
      "responseModalities": ["TEXT", "IMAGE"],
      "imageConfig": {"aspectRatio": "16:9"}
    }
  }'
Wygenerowana przez AI 5-dniowa prognoza pogody dla San Francisco
Wygenerowany przez AI wykres pogody na 5 dni w San Francisco

Odpowiedź zawiera groundingMetadata, które zawiera te wymagane pola:

  • searchEntryPoint: zawiera kod HTML i CSS do renderowania wymaganych sugestii wyszukiwania.
  • groundingChunks: zwraca 3 najpopularniejsze źródła internetowe użyte do ugruntowania wygenerowanego obrazu.

Powiązanie ze źródłem informacji przy użyciu wyszukiwarki Google w przypadku obrazów umożliwia modelom wykorzystywanie obrazów z internetu pobranych za pomocą wyszukiwarki Google jako kontekstu wizualnego do generowania obrazów. Wyszukiwanie obrazów to nowy typ wyszukiwania w ramach istniejącego narzędzia Powiązanie ze źródłem informacji przy użyciu wyszukiwarki Google, który działa równolegle ze standardowym wyszukiwaniem w internecie.

Aby włączyć wyszukiwanie obrazów, skonfiguruj narzędzie googleSearch w żądaniu do interfejsu API i określ imageSearch w obiekcie searchTypes. Wyszukiwarki grafiki można używać niezależnie lub razem z wyszukiwarką internetową.

Pamiętaj, że funkcja powiązania ze źródłem informacji przy użyciu wyszukiwarki Google dla obrazów nie może być używana do wyszukiwania osób.

Python

from google import genai
prompt = "A detailed painting of a Timareta butterfly resting on a flower"

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.1-flash-image-preview",
    contents=prompt,
    config=types.GenerateContentConfig(
        response_modalities=["IMAGE"],
        tools=[
            types.Tool(google_search=types.GoogleSearch(
                search_types=types.SearchTypes(
                    web_search=types.WebSearch(),
                    image_search=types.ImageSearch()
                )
            ))
        ]
    )
)

# Display grounding sources if available
if response.candidates and response.candidates[0].grounding_metadata and response.candidates[0].grounding_metadata.search_entry_point:
    display(HTML(response.candidates[0].grounding_metadata.search_entry_point.rendered_content))

JavaScript

import { GoogleGenAI } from "@google/genai";

async function main() {

  const ai = new GoogleGenAI({});

  const prompt = "A detailed painting of a Timareta butterfly resting on a flower";

  const response = await ai.models.generateContent({
    model: "gemini-3.1-flash-image-preview",
    contents: prompt,
    config: {
      responseModalities: ["IMAGE"],
      tools: [
        {
          googleSearch: {
            searchTypes: {
              webSearch: {},
              imageSearch: {}
            }
          }
        }
      ]
    }
  });

  // Display grounding sources if available
  if (response.candidates && response.candidates[0].groundingMetadata && response.candidates[0].groundingMetadata.searchEntryPoint) {
      console.log(response.candidates[0].groundingMetadata.searchEntryPoint.renderedContent);
  }
}

main();

Go

package main

import (
  "context"
  "fmt"
  "log"

  "google.golang.org/genai"
  pb "google.golang.org/genai/schema"
)

func main() {
  ctx := context.Background()
  client, err := genai.NewClient(ctx, nil)
  if err != nil {
    log.Fatal(err)
  }
  defer client.Close()

  model := client.GenerativeModel("gemini-3.1-flash-image-preview")
  model.Tools = []*pb.Tool{
    {
      GoogleSearch: &pb.GoogleSearch{
        SearchTypes: &pb.SearchTypes{
          WebSearch:   &pb.WebSearch{},
          ImageSearch: &pb.ImageSearch{},
        },
      },
    },
  }
  model.GenerationConfig = &pb.GenerationConfig{
    ResponseModalities: []pb.ResponseModality{genai.Image},
  }

  prompt := "A detailed painting of a Timareta butterfly resting on a flower"
  resp, err := model.GenerateContent(ctx, genai.Text(prompt))
  if err != nil {
    log.Fatal(err)
  }

  if resp.Candidates[0].GroundingMetadata != nil && resp.Candidates[0].GroundingMetadata.SearchEntryPoint != nil {
    fmt.Println(resp.Candidates[0].GroundingMetadata.SearchEntryPoint.RenderedContent)
  }
}

REST

curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{"parts": [{"text": "A detailed painting of a Timareta butterfly resting on a flower"}]}],
    "tools": [{"google_search": {"searchTypes": {"webSearch": {}, "imageSearch": {}}}}],
    "generationConfig": {
      "responseModalities": ["IMAGE"]
    }
  }'

Wymagania dotyczące wyświetlania

Jeśli korzystasz z wyszukiwania obrazów w ramach powiązania ze źródłem informacji przy użyciu wyszukiwarki Google, musisz spełniać te warunki:

  • Atrybucja źródła: musisz podać link do strony internetowej zawierającej obraz źródłowy („strona zawierająca”, a nie sam plik obrazu) w sposób, który użytkownik rozpozna jako link.
  • Bezpośrednia nawigacja: jeśli zdecydujesz się też wyświetlać obrazy źródłowe, musisz zapewnić bezpośrednią ścieżkę, która wymaga jednego kliknięcia, od obrazów źródłowych do strony internetowej, na której się znajdują. Niedozwolone są wszelkie inne implementacje, które opóźniają lub utrudniają dostęp użytkownika do źródłowej strony internetowej, w tym ścieżki wymagające wielu kliknięć lub korzystanie z pośredniej przeglądarki obrazów.

Odpowiedź

W przypadku odpowiedzi opartych na wyszukiwaniu obrazów interfejs API zapewnia jasne atrybucje i metadane, które łączą jego dane wyjściowe ze zweryfikowanymi źródłami. Najważniejsze pola w obiekcie groundingMetadata to:

  • imageSearchQueries: konkretne zapytania używane przez model w kontekście wizualnym (wyszukiwanie obrazem).
  • groundingChunks: zawiera informacje o źródle pobranych wyników. W przypadku źródeł obrazów będą one zwracane jako adresy URL przekierowania z użyciem nowego typu fragmentu obrazu. Ten fragment zawiera:

    • uri: adres URL strony internetowej na potrzeby atrybucji (strony docelowej).
    • image_uri: bezpośredni adres URL obrazu.
  • groundingSupports: zawiera konkretne mapowania, które łączą wygenerowane treści z odpowiednim źródłem cytatu w blokach.

  • searchEntryPoint: zawiera komponent „Wyszukiwarka Google” z kodem HTML i CSS zgodnym z zasadami, który renderuje sugestie wyszukiwania.

Generowanie obrazów w rozdzielczości do 4K

Modele obrazów Gemini 3 domyślnie generują obrazy o rozdzielczości 1K, ale mogą też tworzyć obrazy o rozdzielczości 2K, 4K i 512 pikseli (0,5K) (tylko Gemini 3.1 Flash Image). Aby wygenerować komponenty o wyższej rozdzielczości, w parametrze generation_config podaj wartość image_size.

Musisz użyć wielkiej litery „K” (np. 1K, 2K, 4K). Wartość 512 nie ma sufiksu „K”. Parametry pisane małymi literami (np. 1k) będą odrzucane.

Python

from google import genai
from google.genai import types

prompt = "Da Vinci style anatomical sketch of a dissected Monarch butterfly. Detailed drawings of the head, wings, and legs on textured parchment with notes in English."
aspect_ratio = "1:1" # "1:1","1:4","1:8","2:3","3:2","3:4","4:1","4:3","4:5","5:4","8:1","9:16","16:9","21:9"
resolution = "1K" # "512", "1K", "2K", "4K"

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.1-flash-image-preview",
    contents=prompt,
    config=types.GenerateContentConfig(
        response_modalities=['TEXT', 'IMAGE'],
        image_config=types.ImageConfig(
            aspect_ratio=aspect_ratio,
            image_size=resolution
        ),
    )
)

for part in response.parts:
    if part.text is not None:
        print(part.text)
    elif image:= part.as_image():
        image.save("butterfly.png")

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

async function main() {

  const ai = new GoogleGenAI({});

  const prompt =
      'Da Vinci style anatomical sketch of a dissected Monarch butterfly. Detailed drawings of the head, wings, and legs on textured parchment with notes in English.';
  const aspectRatio = '1:1';
  const resolution = '1K';

  const response = await ai.models.generateContent({
    model: 'gemini-3.1-flash-image-preview',
    contents: prompt,
    config: {
      responseModalities: ['TEXT', 'IMAGE'],
      imageConfig: {
        aspectRatio: aspectRatio,
        imageSize: resolution,
      },
    },
  });

  for (const part of response.candidates[0].content.parts) {
    if (part.text) {
      console.log(part.text);
    } else if (part.inlineData) {
      const imageData = part.inlineData.data;
      const buffer = Buffer.from(imageData, "base64");
      fs.writeFileSync("image.png", buffer);
      console.log("Image saved as image.png");
    }
  }

}

main();

Go

package main

import (
    "context"
    "fmt"
    "log"
    "os"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }
    defer client.Close()

    model := client.GenerativeModel("gemini-3.1-flash-image-preview")
    model.GenerationConfig = &pb.GenerationConfig{
        ResponseModalities: []pb.ResponseModality{genai.Text, genai.Image},
        ImageConfig: &pb.ImageConfig{
            AspectRatio: "1:1",
            ImageSize:   "1K",
        },
    }

    prompt := "Da Vinci style anatomical sketch of a dissected Monarch butterfly. Detailed drawings of the head, wings, and legs on textured parchment with notes in English."
    resp, err := model.GenerateContent(ctx, genai.Text(prompt))
    if err != nil {
        log.Fatal(err)
    }

    for _, part := range resp.Candidates[0].Content.Parts {
        if txt, ok := part.(genai.Text); ok {
            fmt.Printf("%s", string(txt))
        } else if img, ok := part.(genai.ImageData); ok {
            err := os.WriteFile("butterfly.png", img.Data, 0644)
            if err != nil {
                log.Fatal(err)
            }
        }
    }
}

Java

import com.google.genai.Client;
import com.google.genai.types.GenerateContentConfig;
import com.google.genai.types.GenerateContentResponse;
import com.google.genai.types.GoogleSearch;
import com.google.genai.types.ImageConfig;
import com.google.genai.types.Part;
import com.google.genai.types.Tool;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class HiRes {
    public static void main(String[] args) throws IOException {

      try (Client client = new Client()) {
        GenerateContentConfig config = GenerateContentConfig.builder()
            .responseModalities("TEXT", "IMAGE")
            .imageConfig(ImageConfig.builder()
                .aspectRatio("16:9")
                .imageSize("4K")
                .build())
            .build();

        GenerateContentResponse response = client.models.generateContent(
            "gemini-3.1-flash-image-preview", """
              Da Vinci style anatomical sketch of a dissected Monarch butterfly.
              Detailed drawings of the head, wings, and legs on textured
              parchment with notes in English.
              """,
            config);

        for (Part part : response.parts()) {
          if (part.text().isPresent()) {
            System.out.println(part.text().get());
          } else if (part.inlineData().isPresent()) {
            var blob = part.inlineData().get();
            if (blob.data().isPresent()) {
              Files.write(Paths.get("butterfly.png"), blob.data().get());
            }
          }
        }
      }
    }
}

REST

curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{"parts": [{"text": "Da Vinci style anatomical sketch of a dissected Monarch butterfly. Detailed drawings of the head, wings, and legs on textured parchment with notes in English."}]}],
    "tools": [{"google_search": {}}],
    "generationConfig": {
      "responseModalities": ["TEXT", "IMAGE"],
      "imageConfig": {"aspectRatio": "1:1", "imageSize": "1K"}
    }
  }'

Oto przykładowy obraz wygenerowany na podstawie tego prompta:

Wygenerowany przez AI szkic anatomiczny monarszki księżnej w stylu Da Vinci.
Wygenerowany przez AI szkic anatomiczny motyla monarcha w stylu Leonarda da Vinci.

Proces myślowy

Modele obrazów Gemini 3 to modele myślące, które w przypadku złożonych promptów korzystają z procesu rozumowania („Myślenie”). Ta funkcja jest domyślnie włączona i nie można jej wyłączyć w interfejsie API. Więcej informacji o procesie myślowym znajdziesz w przewodniku Myślenie Gemini.

Model generuje maksymalnie 2 obrazy tymczasowe, aby przetestować kompozycję i logikę. Ostatni obraz w sekcji „Myślenie” jest też ostatecznym wyrenderowanym obrazem.

Możesz sprawdzić, jakie myśli doprowadziły do wygenerowania ostatecznego obrazu.

Python

for part in response.parts:
    if part.thought:
        if part.text:
            print(part.text)
        elif image:= part.as_image():
            image.show()

JavaScript

for (const part of response.candidates[0].content.parts) {
  if (part.thought) {
    if (part.text) {
      console.log(part.text);
    } else if (part.inlineData) {
      const imageData = part.inlineData.data;
      const buffer = Buffer.from(imageData, 'base64');
      fs.writeFileSync('image.png', buffer);
      console.log('Image saved as image.png');
    }
  }
}

Sterowanie poziomami myślenia

Dzięki Gemini 3.1 Flash Image możesz kontrolować ilość „myślenia”, jaką model wykorzystuje do zachowania równowagi między jakością a czasem oczekiwania. Domyślna wartość thinkingLevel to minimal, a obsługiwane poziomy to minimalhigh. Ustawienie parametru thinkingLevel na minimal zapewnia najkrótszy czas odpowiedzi. Pamiętaj, że minimalne myślenie nie oznacza, że model w ogóle nie myśli.

Możesz dodać wartość logiczną includeThoughts, aby określić, czy wygenerowane przez model myśli mają być zwracane w odpowiedzi, czy pozostawać ukryte.

Python

from google import genai

response = client.models.generate_content(
    model="gemini-3.1-flash-image-preview",
    contents="A futuristic city built inside a giant glass bottle floating in space",
    config=types.GenerateContentConfig(
        response_modalities=["IMAGE"],
        thinking_config=types.ThinkingConfig(
            thinking_level="High",
            include_thoughts=True
        ),
    )
)

for part in response.parts:
    if part.thought: # Skip outputting thoughts
      continue
    if part.text:
      display(Markdown(part.text))
    elif image:= part.as_image():
      image.show()

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

async function main() {

  const ai = new GoogleGenAI({});

  const response = await ai.models.generateContent({
    model: "gemini-3.1-flash-image-preview",
    contents: "A futuristic city built inside a giant glass bottle floating in space",
    config: {
      responseModalities: ["IMAGE"],
      thinkingConfig: {
        thinkingLevel: "High",
        includeThoughts: true
      },
    },
  });

  for (const part of response.candidates[0].content.parts) {
    if (part.thought) { // Skip outputting thoughts
      continue;
    }
    if (part.text) {
      console.log(part.text);
    } else if (part.inlineData) {
      const imageData = part.inlineData.data;
      const buffer = Buffer.from(imageData, "base64");
      fs.writeFileSync("image.png", buffer);
      console.log("Image saved as image.png");
    }
  }
}
main();

Go

package main

import (
    "context"
    "fmt"
    "log"
    "os"

    "google.golang.org/genai"
    pb "google.golang.org/genai/schema"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }
    defer client.Close()

    model := client.GenerativeModel("gemini-3.1-flash-image-preview")
    model.GenerationConfig = &pb.GenerationConfig{
        ResponseModalities: []pb.ResponseModality{genai.Image},
        ThinkingConfig: &pb.ThinkingConfig{
            ThinkingLevel:   "High",
            IncludeThoughts: true,
        },
    }

    prompt := "A futuristic city built inside a giant glass bottle floating in space"
    resp, err := model.GenerateContent(ctx, genai.Text(prompt))
    if err != nil {
        log.Fatal(err)
    }

    for _, part := range resp.Candidates[0].Content.Parts {
        if part.Thought { // Skip outputting thoughts
            continue
        }
        if txt, ok := part.(genai.Text); ok {
            fmt.Printf("%s", string(txt))
        } else if img, ok := part.(genai.ImageData); ok {
            err := os.WriteFile("image.png", img.Data, 0644)
            if err != nil {
                log.Fatal(err)
            }
        }
    }
}

REST

curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{"parts": [{"text": "A futuristic city built inside a giant glass bottle floating in space"}]}],
    "generationConfig": {
      "responseModalities": ["IMAGE"],
      "thinkingConfig": {
        "thinkingLevel": "High",
        "includeThoughts": true
      }
    }
  }'

Pamiętaj, że tokeny myślenia są rozliczane niezależnie od tego, czy parametr includeThoughts ma wartość true czy false, ponieważ proces myślenia zawsze odbywa się domyślnie, niezależnie od tego, czy go wyświetlasz.

Podpisy myśli

Podpisy myśli to zaszyfrowane reprezentacje wewnętrznego procesu myślowego modelu. Służą one do zachowania kontekstu rozumowania w interakcjach wieloetapowych. Wszystkie odpowiedzi zawierają pole thought_signature. Ogólnie rzecz biorąc, jeśli w odpowiedzi modelu otrzymasz podpis myśli, w kolejnej turze przekaż go dokładnie tak, jak został otrzymany, gdy wysyłasz historię rozmowy. Brak rozpowszechniania sygnatur myśli może spowodować niepowodzenie odpowiedzi. Więcej informacji o sygnaturach znajdziesz w dokumentacji sygnatury myśli.

Oto jak działają sygnatury myśli:

  • Wszystkie części inline_data z obrazem mimetype, które są częścią odpowiedzi, powinny mieć podpis.
  • Jeśli na początku (przed jakimkolwiek obrazem) zaraz po przemyśleniach znajdują się fragmenty tekstu, pierwszy z nich również powinien zawierać podpis.
  • Jeśli inline_data fragmenty z obrazem mimetype są częścią przemyśleń, nie będą miały podpisów.

Poniższy kod pokazuje przykład miejsca, w którym znajdują się sygnatury myśli:

[
  {
    "inline_data": {
      "data": "<base64_image_data_0>",
      "mime_type": "image/png"
    },
    "thought": true // Thoughts don't have signatures
  },
  {
    "inline_data": {
      "data": "<base64_image_data_1>",
      "mime_type": "image/png"
    },
    "thought": true // Thoughts don't have signatures
  },
  {
    "inline_data": {
      "data": "<base64_image_data_2>",
      "mime_type": "image/png"
    },
    "thought": true // Thoughts don't have signatures
  },
  {
    "text": "Here is a step-by-step guide to baking macarons, presented in three separate images.\n\n### Step 1: Piping the Batter\n\nThe first step after making your macaron batter is to pipe it onto a baking sheet. This requires a steady hand to create uniform circles.\n\n",
    "thought_signature": "<Signature_A>" // The first non-thought part always has a signature
  },
  {
    "inline_data": {
      "data": "<base64_image_data_3>",
      "mime_type": "image/png"
    },
    "thought_signature": "<Signature_B>" // All image parts have a signatures
  },
  {
    "text": "\n\n### Step 2: Baking and Developing Feet\n\nOnce piped, the macarons are baked in the oven. A key sign of a successful bake is the development of \"feet\"—the ruffled edge at the base of each macaron shell.\n\n"
    // Follow-up text parts don't have signatures
  },
  {
    "inline_data": {
      "data": "<base64_image_data_4>",
      "mime_type": "image/png"
    },
    "thought_signature": "<Signature_C>" // All image parts have a signatures
  },
  {
    "text": "\n\n### Step 3: Assembling the Macaron\n\nThe final step is to pair the cooled macaron shells by size and sandwich them together with your desired filling, creating the classic macaron dessert.\n\n"
  },
  {
    "inline_data": {
      "data": "<base64_image_data_5>",
      "mime_type": "image/png"
    },
    "thought_signature": "<Signature_D>" // All image parts have a signatures
  }
]

Inne tryby generowania obrazów

Gemini obsługuje inne tryby interakcji z obrazami w zależności od struktury promptu i kontekstu, w tym:

  • Tekst na obraz(y) i tekst (przeplatany): generuje obrazy z powiązanym tekstem.
    • Przykładowy prompt: „Wygeneruj ilustrowany przepis na paellę”.
  • Obrazy i tekst na obrazy i tekst (przeplatane): wykorzystuje wejściowe obrazy i tekst do tworzenia nowych powiązanych obrazów i tekstu.
    • Przykładowy prompt: (z obrazem umeblowanego pokoju) „Jakie inne kolory sof pasowałyby do tego pomieszczenia? Czy możesz zaktualizować obraz?”.

Generowanie obrazów w partiach

Jeśli chcesz wygenerować wiele obrazów, możesz użyć interfejsu Batch API. W zamian za czas realizacji do 24 godzin otrzymasz wyższe limity żądań.

Zapoznaj się z dokumentacją interfejsu Batch API do generowania obrazówprzewodnikiem, w których znajdziesz przykłady obrazów i kodu interfejsu Batch API.

Przewodnik po promptach i strategiach

Opanowanie generowania obrazów zaczyna się od jednej podstawowej zasady:

Opisz scenę, nie podawaj tylko słów kluczowych. Główną zaletą modelu jest dogłębne rozumienie języka. Opisowy akapit z narracją prawie zawsze wygeneruje lepszy i bardziej spójny obraz niż lista niepowiązanych ze sobą słów.

Prompty do generowania obrazów

Poniższe strategie pomogą Ci tworzyć skuteczne prompty, aby generować dokładnie takie obrazy, jakich szukasz.

Fotografia

W przypadku realistycznych obrazów używaj terminów fotograficznych. Wspomnij o kątach kamery, typach obiektywów, oświetleniu i drobnych szczegółach, aby uzyskać realistyczny efekt.

Prompt Wygenerowane dane wyjściowe
Zdjęcie z bliska starszego japońskiego ceramika z głębokimi zmarszczkami od słońca i ciepłym, wymownym uśmiechem. Dokładnie ogląda świeżo szkliwioną czarkę do herbaty. Tłem jest jego rustykalny, skąpany w słońcu warsztat. Scena jest oświetlona miękkim światłem złotej godziny, które wpada przez okno i podkreśla delikatną teksturę gliny. Zdjęcie wykonane obiektywem 85 mm do portretów, dzięki czemu tło jest miękkie i rozmyte (efekt bokeh). Ogólny nastrój jest spokojny i mistrzowski. Orientacja pionowa. Starszy japoński ceramik

Stylizowane ilustracje i naklejki

Aby utworzyć naklejki, ikony lub komponenty, wyraźnie określ styl i poproś o białe tło.

Prompt Wygenerowane dane wyjściowe
Naklejka w stylu kawaii przedstawiająca szczęśliwą pandkę rudą w małym bambusowym kapeluszu. Żuje zielony liść bambusa. Grafika ma wyraźne, czyste kontury, proste cieniowanie i żywą paletę kolorów. Tło musi być białe. Naklejka z pandką rudą w stylu kawaii

Dokładny tekst na obrazach

Gemini świetnie radzi sobie z renderowaniem tekstu. Opisz dokładnie tekst, styl czcionki i ogólny projekt. Używaj Gemini 3 Pro Image Preview do profesjonalnej produkcji zasobów.

Prompt Wygenerowane dane wyjściowe
Utwórz nowoczesne, minimalistyczne logo kawiarni o nazwie „The Daily Grind”. Tekst powinien być napisany czystą, pogrubioną czcionką bezszeryfową. Schemat kolorów jest czarno-biały. Umieść logo w okręgu. Użyj ziarna kawy w sprytny sposób. Logo kawiarni

makiety produktów i fotografie komercyjne,

Idealne do tworzenia przejrzystych, profesjonalnych zdjęć produktów na potrzeby e-commerce, reklam i budowania marki.

Prompt Wygenerowane dane wyjściowe
Zdjęcie produktu w wysokiej rozdzielczości wykonane w oświetleniu studyjnym przedstawiające minimalistyczny ceramiczny kubek do kawy w matowej czerni, umieszczony na polerowanej betonowej powierzchni. Oświetlenie to trójpunktowy softbox, który ma tworzyć miękkie, rozproszone podświetlenia i eliminować ostre cienie. Kąt kamery to lekko podniesione ujęcie pod kątem 45 stopni, które podkreśla czyste linie. Bardzo realistyczne, z ostrym obrazem pary unoszącej się z kawy. Obraz kwadratowy. Zdjęcie produktu – ceramiczny kubek do kawy

Minimalistyczny projekt z negatywną przestrzenią

Doskonale nadaje się do tworzenia tła na potrzeby stron internetowych, prezentacji lub materiałów marketingowych, na których będzie wyświetlany tekst.

Prompt Wygenerowane dane wyjściowe
Minimalistyczna kompozycja przedstawiająca pojedynczy, delikatny czerwony liść klonu umieszczony w prawym dolnym rogu kadru. Tło to rozległe, puste płótno w kolorze złamanej bieli, które tworzy znaczną przestrzeń negatywną dla tekstu. Miękkie, rozproszone oświetlenie z lewej górnej strony. Obraz kwadratowy. Minimalistyczny wzór z czerwonym liściem klonu

Sztuka sekwencyjna (panel komiksu / scenorys)

Opiera się na spójności postaci i opisie sceny, aby tworzyć panele do wizualnego opowiadania historii. Aby uzyskać dokładność tekstu i możliwość opowiadania historii, te prompty działają najlepiej z Gemini 3 Pro i Gemini 3.1 Flash Image Preview.

Prompt Wygenerowane dane wyjściowe

Obraz wejściowy:

Mężczyzna w białych okularach
Obraz wejściowy

Prompt: Utwórz 3-panelowy komiks w mrocznym stylu noir z kontrastowymi czarno-białymi tuszami. Umieść postać w zabawnej scenie.

Mroczny panel komiksowy w stylu noir

Generowanie obrazów na podstawie najnowszych informacji lub danych w czasie rzeczywistym za pomocą wyszukiwarki Google. Jest to przydatne w przypadku wiadomości, prognoz pogody i innych tematów, które wymagają aktualizacji.

Prompt Wygenerowane dane wyjściowe
Utwórz prostą, ale stylową grafikę przedstawiającą wczorajszy mecz Arsenalu w Lidze Mistrzów. Grafika z wynikiem meczu Arsenalu

Prompty do edytowania obrazów

Te przykłady pokazują, jak przesyłać obrazy wraz z promptami tekstowymi w celu edycji, kompozycji i przenoszenia stylu.

Dodawanie i usuwanie elementów

Prześlij obraz i opisz zmiany. Model będzie pasować do stylu, oświetlenia i perspektywy oryginalnego obrazu.

Prompt Wygenerowane dane wyjściowe

Obraz wejściowy:

Fotorealistyczne zdjęcie puszystego rudego kota...
Obraz wejściowy

Prompt: na podstawie przesłanego zdjęcia mojego kota dodaj na jego głowie mały, dziergany kapelusz czarodzieja. Spraw, aby wyglądał na wygodnie siedzącego i pasował do łagodnego oświetlenia na zdjęciu.

Kot w kapeluszu czarodzieja

Retusz (maskowanie semantyczne)

Określ „maskę” w rozmowie, aby edytować konkretną część obrazu, pozostawiając resztę bez zmian.

Prompt Wygenerowane dane wyjściowe

Obraz wejściowy:

Szerokie ujęcie nowoczesnego, dobrze oświetlonego salonu…
Obraz wejściowy

Prompt: Na podstawie podanego zdjęcia salonu zmień tylko niebieską sofę na brązową skórzaną sofę Chesterfield w stylu vintage. Pozostaw resztę pomieszczenia bez zmian, w tym poduszki na sofie i oświetlenie.

Salon z brązową skórzaną sofą

Przenoszenie stylu

Prześlij obraz i poproś model o odtworzenie jego treści w innym stylu artystycznym.

Prompt Wygenerowane dane wyjściowe

Obraz wejściowy:

Fotorealistyczne zdjęcie w wysokiej rozdzielczości przedstawiające ruchliwą ulicę w mieście…
Obraz wejściowy

Prompt: przekształć podane zdjęcie nowoczesnej ulicy w mieście nocą w stylu artystycznym „Gwiaździstej nocy” Vincenta van Gogha. Zachowaj oryginalną kompozycję budynków i samochodów, ale wszystkie elementy przedstaw za pomocą wirujących, impastowych pociągnięć pędzla i dramatycznej palety głębokich błękitów i jasnych żółci.

Ulica w mieście w stylu „Gwiaździstej nocy”

Zaawansowana kompozycja: łączenie wielu obrazów

Prześlij kilka obrazów jako kontekst, aby utworzyć nową, złożoną scenę. To idealne rozwiązanie do tworzenia makiet produktów lub kreatywnych kolaży.

Prompt Wygenerowane dane wyjściowe

Obrazy wejściowe:

Profesjonalne zdjęcie niebieskiej letniej sukienki w kwiaty…
Dane wejściowe 1: sukienka
Zdjęcie całej sylwetki kobiety z włosami spiętymi w kok...
Dane wejściowe 2: model

Prompt: utwórz profesjonalne zdjęcie mody do e-commerce. Weź niebieską sukienkę w kwiaty z pierwszego obrazu i pozwól kobiecie z drugiego obrazu ją założyć. Wygeneruj realistyczne zdjęcie całej sylwetki kobiety w sukience. Dostosuj oświetlenie i cienie do warunków zewnętrznych.

Zdjęcie produktu w sklepie internetowym z odzieżą

Zachowanie szczegółów w wysokiej jakości

Aby mieć pewność, że ważne szczegóły (np. twarz lub logo) zostaną zachowane podczas edycji, dokładnie je opisz w prośbie o zmiany.

Prompt Wygenerowane dane wyjściowe

Obrazy wejściowe:

Profesjonalne zdjęcie portretowe kobiety z brązowymi włosami i niebieskimi oczami...
Wejście 1: kobieta
Proste, nowoczesne logo z literami „G” i „A”...
Wejście 2: logo

Prompt: Wybierz pierwsze zdjęcie kobiety z brązowymi włosami, niebieskimi oczami i neutralnym wyrazem twarzy. Dodaj logo z drugiego obrazu na czarnym t-shircie. Upewnij się, że twarz i rys twarzy kobiety pozostają całkowicie niezmienione. Logo powinno wyglądać tak, jakby było naturalnie nadrukowane na materiale, zgodnie z fałdami koszuli.

Kobieta w koszulce z logo

ożywiać coś,

Prześlij szkic lub rysunek i poproś model o przekształcenie go w gotowy obraz.

Prompt Wygenerowane dane wyjściowe

Obraz wejściowy:

Szkic samochodu
Szkic samochodu

Prompt: Przekształć ten szkic ołówkiem futurystycznego samochodu w dopracowane zdjęcie gotowego samochodu koncepcyjnego w salonie. Zachowaj eleganckie linie i niską sylwetkę z szkicu, ale dodaj metaliczny niebieski lakier i neonowe oświetlenie obręczy.

Wypolerowane zdjęcie samochodu koncepcyjnego

Spójność postaci: widok 360°

Możesz generować widoki postaci w 360 stopniach, wielokrotnie prosząc o wyświetlenie jej pod różnymi kątami. Aby uzyskać najlepsze wyniki, w kolejnych promptach uwzględniaj wygenerowane wcześniej obrazy, aby zachować spójność. W przypadku złożonych póz dołącz obraz referencyjny z wybraną pozą.

Prompt Wygenerowane dane wyjściowe

Obraz wejściowy:

Oryginalne dane wejściowe przedstawiające mężczyznę w białych okularach
Oryginalny obraz

Prompt: Portret studyjny tego mężczyzny na białym tle, z profilu, patrzącego w prawo

Zdjęcie mężczyzny w białych okularach patrzącego w prawo
Mężczyzna w białych okularach patrzy w prawo
Zdjęcie mężczyzny w białych okularach patrzącego przed siebie
Mężczyzna w białych okularach patrzy przed siebie

Sprawdzone metody

Aby poprawić wyniki, włącz do swojego przepływu pracy te profesjonalne strategie.

  • Podawaj bardzo konkretne informacje: im więcej szczegółów podasz, tym większą będziesz mieć kontrolę. Zamiast „zbroja fantasy” opisz ją: „ozdobna elfia zbroja płytowa, wyryte wzory z liści srebra, wysoki kołnierz i naramienniki w kształcie skrzydeł sokoła”.
  • Podaj kontekst i cel: wyjaśnij cel obrazu. Zrozumienie kontekstu przez model wpłynie na ostateczne dane wyjściowe. Na przykład „Utwórz logo dla minimalistycznej marki kosmetyków do pielęgnacji skóry z wyższej półki” da lepsze wyniki niż samo „Utwórz logo”.
  • Iteracja i dopracowanie: nie oczekuj idealnego obrazu za pierwszym razem. Wykorzystaj konwersacyjny charakter modelu, aby wprowadzać drobne zmiany. Możesz kontynuować, używając promptów takich jak „Świetnie, ale czy możesz sprawić, żeby oświetlenie było nieco cieplejsze?” lub „Pozostaw wszystko bez zmian, ale zmień wyraz twarzy postaci na bardziej poważny”.
  • Używaj instrukcji krok po kroku: w przypadku złożonych scen z wieloma elementami podziel prompt na kroki. „Najpierw utwórz tło przedstawiające spokojny, zamglony las o świcie. Następnie na pierwszym planie dodaj pokryty mchem starożytny kamienny ołtarz. Na koniec połóż na ołtarzu jeden świecący miecz”.
  • Używaj „semantycznych negatywnych promptów”: zamiast pisać „bez samochodów” opisz pożądaną scenę w sposób pozytywny: „pusta, opuszczona ulica bez śladów ruchu”.
  • Sterowanie kamerą: używaj języka fotograficznego i filmowego, aby sterować kompozycją. Określenia takie jak wide-angle shot, macro shot, low-angle perspective.

Ograniczenia

  • Aby uzyskać najlepsze wyniki, używaj tych języków: EN, ar-EG, de-DE, es-MX, fr-FR, hi-IN, id-ID, it-IT, ja-JP, ko-KR, pt-BR, ru-RU, ua-UA, vi-VN, zh-CN.
  • Generowanie obrazów nie obsługuje danych wejściowych audio ani wideo.
  • Model nie zawsze będzie generować dokładnie taką liczbę obrazów, o jaką użytkownik wyraźnie poprosi.
  • gemini-2.5-flash-image działa najlepiej w przypadku maksymalnie 3 obrazów wejściowych, a gemini-3-pro-image-preview obsługuje 5 obrazów o wysokiej wierności i maksymalnie 14 obrazów. gemini-3.1-flash-image-preview obsługuje podobieństwo znaków do 4 znaków i wierność do 10 obiektów w ramach jednego procesu.
  • Podczas generowania tekstu do obrazu Gemini działa najlepiej, jeśli najpierw wygenerujesz tekst, a potem poprosisz o obraz z tym tekstem.
  • gemini-3.1-flash-image-preview Powiązanie ze źródłem informacji przy użyciu wyszukiwarki Google nie obsługuje obecnie korzystania z rzeczywistych zdjęć osób z wyszukiwarki.
  • Wszystkie wygenerowane obrazy zawierają znak wodny SynthID.

Konfiguracje opcjonalne

Opcjonalnie możesz skonfigurować tryby odpowiedzi i format wyjściowy modelu w polu config wywołań generate_content.

Typy wyjściowe

Domyślnie model zwraca odpowiedzi tekstowe i obrazowe (czyli response_modalities=['Text', 'Image']). Możesz skonfigurować odpowiedź tak, aby zwracała tylko obrazy bez tekstu, używając response_modalities=['Image'].

Python

response = client.models.generate_content(
    model="gemini-3.1-flash-image-preview",
    contents=[prompt],
    config=types.GenerateContentConfig(
        response_modalities=['Image']
    )
)

JavaScript

const response = await ai.models.generateContent({
    model: "gemini-3.1-flash-image-preview",
    contents: prompt,
    config: {
        responseModalities: ['Image']
    }
  });

Go

result, _ := client.Models.GenerateContent(
    ctx,
    "gemini-3.1-flash-image-preview",
    genai.Text("Create a picture of a nano banana dish in a " +
                " fancy restaurant with a Gemini theme"),
    &genai.GenerateContentConfig{
        ResponseModalities: "Image",
    },
  )

Java

response = client.models.generateContent(
    "gemini-3.1-flash-image-preview",
    prompt,
    GenerateContentConfig.builder()
        .responseModalities("IMAGE")
        .build());

REST

curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{
      "parts": [
        {"text": "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme"}
      ]
    }],
    "generationConfig": {
      "responseModalities": ["Image"]
    }
  }'

Format obrazu i rozmiar obrazu

Domyślnie model dopasowuje rozmiar obrazu wyjściowego do rozmiaru obrazu wejściowego lub generuje kwadraty o proporcjach 1:1. Format obrazu wyjściowego możesz kontrolować za pomocą pola aspect_ratio w sekcji image_config w żądaniu odpowiedzi, jak pokazano poniżej:

Python

# For gemini-2.5-flash-image
response = client.models.generate_content(
    model="gemini-2.5-flash-image",
    contents=[prompt],
    config=types.GenerateContentConfig(
        image_config=types.ImageConfig(
            aspect_ratio="16:9",
        )
    )
)

# For gemini-3.1-flash-image-preview and gemini-3-pro-image-preview
response = client.models.generate_content(
    model="gemini-3.1-flash-image-preview",
    contents=[prompt],
    config=types.GenerateContentConfig(
        image_config=types.ImageConfig(
            aspect_ratio="16:9",
            image_size="2K",
        )
    )
)

JavaScript

// For gemini-2.5-flash-image
const response = await ai.models.generateContent({
    model: "gemini-2.5-flash-image",
    contents: prompt,
    config: {
      imageConfig: {
        aspectRatio: "16:9",
      },
    }
  });

// For gemini-3.1-flash-image-preview and gemini-3-pro-image-preview
const response_gemini3 = await ai.models.generateContent({
    model: "gemini-3.1-flash-image-preview",
    contents: prompt,
    config: {
      imageConfig: {
        aspectRatio: "16:9",
        imageSize: "2K",
      },
    }
  });

Go

// For gemini-2.5-flash-image
result, _ := client.Models.GenerateContent(
    ctx,
    "gemini-2.5-flash-image",
    genai.Text("Create a picture of a nano banana dish in a " +
                " fancy restaurant with a Gemini theme"),
    &genai.GenerateContentConfig{
        ImageConfig: &genai.ImageConfig{
          AspectRatio: "16:9",
        },
    }
  )

// For gemini-3.1-flash-image-preview and gemini-3-pro-image-preview
result_gemini3, _ := client.Models.GenerateContent(
    ctx,
    "gemini-3.1-flash-image-preview",
    genai.Text("Create a picture of a nano banana dish in a " +
                " fancy restaurant with a Gemini theme"),
    &genai.GenerateContentConfig{
        ImageConfig: &genai.ImageConfig{
          AspectRatio: "16:9",
          ImageSize: "2K",
        },
    }
  )

Java

// For gemini-2.5-flash-image
response = client.models.generateContent(
    "gemini-2.5-flash-image",
    prompt,
    GenerateContentConfig.builder()
        .imageConfig(ImageConfig.builder()
            .aspectRatio("16:9")
            .build())
        .build());

// For gemini-3.1-flash-image-preview and gemini-3-pro-image-preview
response_gemini3 = client.models.generateContent(
    "gemini-3.1-flash-image-preview",
    prompt,
    GenerateContentConfig.builder()
        .imageConfig(ImageConfig.builder()
            .aspectRatio("16:9")
            .imageSize("2K")
            .build())
        .build());

REST

# For gemini-2.5-flash-image
curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-image:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": [{
      "parts": [
        {"text": "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme"}
      ]
    }],
    "generationConfig": {
      "imageConfig": {
        "aspectRatio": "16:9"
      }
    }
  }'

# For gemini-3-pro-image-preview
curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": [{
      "parts": [
        {"text": "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme"}
      ]
    }],
    "generationConfig": {
      "imageConfig": {
        "aspectRatio": "16:9",
        "imageSize": "2K"
      }
    }
  }'

Dostępne proporcje i rozmiar wygenerowanego obrazu znajdziesz w tabelach poniżej:

3.1 Flash Image Preview

Format obrazu Rozdzielczość 512 0,5 tys.tokenów Rozdzielczość 1K 1 tysiąc tokenów Rozdzielczość 2K 2 tys. tokenów Rozdzielczość 4K 4 tys. tokenów
1:1 512 x 512 747 1024 × 1024 1120 2048x2048 1680 4096 x 4096 2520
1:4 256 x 1024 747 512x2048 1120 1024 x 4096 1680 2048x8192 2520
1:8 192x1536 747 384 x 3072 1120 768 x 6144 1680 1536 x 12288 2520
2:3 424 x 632 747 848 x 1264 1120 1696 x 2528 1680 3392 x 5056 2520
3:2 632 x 424 747 1264 x 848 1120 2528 x 1696 1680 5056 x 3392 2520
3:4 448 x 600 747 896 x 1200 1120 1792 x 2400 1680 3584 x 4800 2520
4:1 1024 x 256 747 2048 x 512 1120 4096 x 1024 1680 8192 x 2048 2520
4:3 600 x 448 747 1200 x 896 1120 2400 x 1792 1680 4800 x 3584 2520
4:5 464 x 576 747 928 x 1152 1120 1856 x 2304 1680 3712x4608 2520
5:4 576 x 464 747 1152 x 928 1120 2304 x 1856 1680 4608x3712 2520
8:1 1536x192 747 3072 x 384 1120 6144 x 768 1680 12288 x 1536 2520
9:16 384 x 688 747 768 x 1376 1120 1536 x 2752 1680 3072 x 5504 2520
16:9 688 x 384 747 1376 x 768 1120 2752 x 1536 1680 5504 x 3072 2520
21:9 792 x 168 747 1584 x 672 1120 3168 x 1344 1680 6336 x 2688 2520

3 Pro – podgląd obrazu

Format obrazu Rozdzielczość 1K 1 tysiąc tokenów Rozdzielczość 2K 2 tys. tokenów Rozdzielczość 4K 4 tys. tokenów
1:1 1024 × 1024 1120 2048x2048 1120 4096 x 4096 2000
2:3 848 x 1264 1120 1696 x 2528 1120 3392 x 5056 2000
3:2 1264 x 848 1120 2528 x 1696 1120 5056 x 3392 2000
3:4 896 x 1200 1120 1792 x 2400 1120 3584 x 4800 2000
4:3 1200 x 896 1120 2400 x 1792 1120 4800 x 3584 2000
4:5 928 x 1152 1120 1856 x 2304 1120 3712x4608 2000
5:4 1152 x 928 1120 2304 x 1856 1120 4608x3712 2000
9:16 768 x 1376 1120 1536 x 2752 1120 3072 x 5504 2000
16:9 1376 x 768 1120 2752 x 1536 1120 5504 x 3072 2000
21:9 1584 x 672 1120 3168 x 1344 1120 6336 x 2688 2000

Gemini 2.5 Flash Image

Format obrazu Rozdzielczość Tokeny
1:1 1024 × 1024 1290
2:3 832 x 1248 1290
3:2 1248 x 832 1290
3:4 864 x 1184 1290
4:3 1184 x 864 1290
4:5 896 x 1152 1290
5:4 1152 x 896 1290
9:16 768 x 1344 1290
16:9 1344 x 768 1290
21:9 1536 x 672 1290

Wybór modelu

Wybierz model najlepiej dopasowany do Twojego konkretnego przypadku użycia.

  • Gemini 3.1 Flash Image Preview (Nano Banana 2 Preview) to model do generowania obrazów, który zapewnia najlepszą ogólną wydajność i równowagę między inteligencją a kosztem i czasem oczekiwania. Więcej informacji znajdziesz na stronie z cenamimożliwościami modelu.

  • Gemini 3 Pro Image Preview (wersja testowa Nano Banana Pro) jest przeznaczony do tworzenia profesjonalnych zasobów i złożonych instrukcji. Ten model wykorzystuje oparcie na faktach z wyszukiwarki Google, domyślny proces „myślenia”, który dopracowuje kompozycję przed wygenerowaniem, i może generować obrazy w rozdzielczości do 4K. Więcej informacji znajdziesz na stronie z cenamimożliwościami modelu.

  • Gemini 2.5 Flash Image (Nano Banana) został zaprojektowany z myślą o szybkości i wydajności. Ten model jest zoptymalizowany pod kątem zadań o dużej liczbie zapytań i małym opóźnieniu. Generuje obrazy w rozdzielczości 1024 pikseli. Więcej informacji znajdziesz na stronie z cenamimożliwościami modelu.

Kiedy używać Imagen

Oprócz korzystania z wbudowanych funkcji generowania obrazów w Gemini możesz też uzyskać dostęp do Imagen, naszego specjalistycznego modelu generowania obrazów, za pomocą interfejsu Gemini API.

Imagen 4 to model, od którego warto zacząć generowanie obrazów za pomocą Imagen. Wybierz Imagen 4 Ultra w przypadku zaawansowanych zastosowań lub gdy potrzebujesz obrazów o najwyższej jakości (pamiętaj, że możesz wygenerować tylko 1 obraz naraz).

Co dalej?

  • Więcej przykładów i fragmentów kodu znajdziesz w przewodniku.
  • Aby dowiedzieć się, jak generować filmy za pomocą interfejsu Gemini API, zapoznaj się z przewodnikiem po Veo.
  • Więcej informacji o modelach Gemini znajdziesz w artykule Modele Gemini.