مهاجرت از Imagen به مدل Gemini Image ("نانو موز")


تمام مدل‌های Imagen منسوخ شده‌اند و در ۲۴ ژوئن ۲۰۲۶ از کار خواهند افتاد . این منسوخ شدن و از کار افتادن در سراسر گوگل و برای هر دو رابط برنامه‌نویسی Gemini Developer و Vertex AI Gemini API اعمال می‌شود.

قبل از این تاریخ خاموشی، برای جلوگیری از اختلال در سرویس، باید برنامه‌های خود را از استفاده از مدل‌های Imagen به استفاده از مدل‌های Gemini Image (مدل‌های "نانو موز") منتقل کنید، همانطور که در این راهنما توضیح داده شده است.

اگر در مورد این منسوخ شدن و خاموش شدن با مشکل فوری مواجه شدید، با پشتیبانی Firebase تماس بگیرید .

مدل‌های جایگزین Gemini Image

برای انتخاب مدل جایگزین Gemini Image برای برنامه خود، جدول زیر را بررسی کنید.

مدل ایمیجن مدل‌های تصویر جمینی ("نانو موز")
imagen-4.0-fast-generate-001 gemini-2.5-flash-image (GA)
gemini-3.1-flash-image-preview (با MINIMAL سطح تفکر)
imagen-4.0-generate-001 gemini-2.5-flash-image (GA)
gemini-3.1-flash-image-preview (با سطح تفکر HIGH )
imagen-4.0-ultra-generate-001 gemini-2.5-flash-image (GA)
gemini-3-pro-image-preview
imagen-3.0-capability-001 gemini-2.5-flash-image (GA)
gemini-3.1-flash-image-preview

برنامه خود را منتقل کنید

این بخش نمونه‌های قبل و بعد از مهاجرت از مدل Imagen به مدل Gemini Image را نشان می‌دهد.

تولید تصویر از متن

برای مشاهده محتوا و کد مخصوص ارائه‌دهنده در این صفحه، روی ارائه‌دهنده API Gemini خود کلیک کنید.

برای تولید تصویر از متن، برنامه خود را مهاجرت دهید:

  • از یک مدل جایگزین مناسب Gemini Image (مانند gemini-2.5-flash-image ) استفاده کنید.

  • یک نمونه GenerativeModel ایجاد کنید (به جای یک نمونه ImagenModel ).

  • گزینه‌های پیکربندی مدل را برای تطبیق با مدل‌های Gemini Image به‌روزرسانی کنید.

    • به عنوان بخشی از این پیکربندی، یک روش پاسخ IMAGE تنظیم کنید.
      توجه داشته باشید که مدل‌های تصویر Gemini را می‌توان طوری پیکربندی کرد که هم تصویر و هم متن را برگردانند.
  • (فقط API مربوط به Vertex AI Gemini ) مکانی که به مدل دسترسی دارید را به مکانی که برای مدل‌های تصویر Gemini پشتیبانی می‌شود، به‌روزرسانی کنید. ما global توصیه می‌کنیم.

سویفت

قبل از


import FirebaseAILogic

// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())

// Create an `ImagenModel` instance with a model that supports your use case
let model = ai.imagenModel(modelName: "IMAGEN_MODEL_NAME")

// Provide an image generation prompt
let prompt = "An astronaut riding a horse"

// To generate an image, call `generateImages` with the text prompt
let response = try await model.generateImages(prompt: prompt)

// Handle the generated image
guard let image = response.images.first else {
  fatalError("No image in the response.")
}
let uiImage = UIImage(data: image.data)

بعد از


import FirebaseAILogic

// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())

// Create a `GenerativeModel` instance with a Gemini model that supports image output
let model = ai.generativeModel(
  modelName: "GEMINI_IMAGE_MODEL_NAME",
  generationConfig: GenerationConfig(
    responseModalities: [.image],
    imageConfig: ImageConfig(aspectRatio: .landscape4x3)
  )
)

// Provide an image generation prompt
let prompt = "An astronaut riding a horse"

// To generate an image, call `generateContent` with the text prompt
let response = try await model.generateContent(prompt)

// Handle the case where no images were generated
guard let inlineDataPart = response.inlineDataParts.first else {
  fatalError("No image in the response.")
}

// Process the image
guard let uiImage = UIImage(data: inlineDataPart.data) else {
  fatalError("Failed to convert data to UIImage.")
}

Kotlin

قبل از


// Initialize the Gemini Developer API backend service
val ai = Firebase.ai(backend = GenerativeBackend.googleAI())

// Create an `ImagenModel` instance with an Imagen model that supports your use case
val model = ai.imagenModel("IMAGEN_MODEL_NAME")

// Provide an image generation prompt
val prompt = "An astronaut riding a horse"

// To generate an image, call `generateImages` with the text prompt
val imageResponse = model.generateImages(prompt)

// Handle the generated image
val image = imageResponse.images.first()

val bitmapImage = image.asBitmap()

بعد از


// Initialize the Gemini Developer API backend service
val ai = Firebase.ai(backend = GenerativeBackend.googleAI())

// Create a `GenerativeModel` instance with a Gemini model that supports image output
val model = ai.generativeModel(
    modelName = "GEMINI_IMAGE_MODEL_NAME",
    generationConfig = generationConfig {
      responseModalities = listOf(ResponseModality.IMAGE),
      imageConfig = imageConfig {
        aspectRatio = AspectRatio.LANDSCAPE_4x3
      }
    }
)

// Provide an image generation prompt
val prompt = "An astronaut riding a horse"

// To generate an image, call `generateContent` with the text prompt
val imageResponse = model.generateContent(prompt)

if (imageResponse.finishReason == FinishReason.NO_IMAGE) {
  // Handle the case where no images were generated
} else {
  // Handle the generated image
  val bitmapImage = imageResponse.candidates.first().content.parts.filterIsInstance().firstOrNull()?.image
}

Java

قبل از


// Initialize the Gemini Developer API backend service
// Create an `ImagenModel` instance with an Imagen model that supports your use case
ImagenModel imagenModel = FirebaseAI.getInstance(GenerativeBackend.googleAI())
        .imagenModel(
                /* modelName */ "IMAGEN_MODEL_NAME");

ImagenModelFutures model = ImagenModelFutures.from(imagenModel);

// Provide an image generation prompt
String prompt = "An astronaut riding a horse";

// To generate an image, call `generateImages` with the text prompt
Futures.addCallback(model.generateImages(prompt), new FutureCallback<ImagenGenerationResponse>() {
    @Override
    public void onSuccess(ImagenGenerationResponse result) {
        if (result.getImages().isEmpty()) {
            Log.d("TAG", "No images generated");
        }
        Bitmap bitmap = result.getImages().get(0).asBitmap();
        // Use the bitmap to display the image in your UI
    }

    @Override
    public void onFailure(Throwable t) {
        // ...
    }
}, Executors.newSingleThreadExecutor());

بعد از


// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a Gemini model that supports image output
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI()).generativeModel(
    "GEMINI_IMAGE_MODEL_NAME",
    new GenerationConfig.Builder()
        .setResponseModalities(Arrays.asList(ResponseModality.IMAGE))
        .setImageConfig(new ImageConfig(AspectRatio.LANDSCAPE_4x3, null))
        .build()
);

GenerativeModelFutures model = GenerativeModelFutures.from(ai);

// Provide a text prompt instructing the model to generate an image
Content prompt = new Content.Builder()
        .addText("An astronaut riding a horse")
        .build();

// To generate an image, call `generateContent` with the text input
Executor executor = Executors.newSingleThreadExecutor();
ListenableFuture response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        if (result.finishReason == FinishReason.NO_IMAGE) {
            // handle the case where no images were generated
            return;
        }
        // iterate over all the parts in the first candidate in the result object
        for (Part part : result.getCandidates().get(0).getContent().getParts()) {
            if (part instanceof ImagePart) {
                ImagePart imagePart = (ImagePart) part;
                // The returned image as a bitmap
                Bitmap generatedImageAsBitmap = imagePart.getImage();
                break;
            }
        }
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

Web

قبل از


import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, getImagenModel, GoogleAIBackend } from "firebase/ai";

// TODO(developer) Replace the following with your app's Firebase configuration
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create an `ImagenModel` instance with an Imagen model that supports your use case
const model = getImagenModel(ai, { model: "IMAGEN_MODEL_NAME" });

// Provide an image generation prompt
const prompt = "An astronaut riding a horse.";

// To generate an image, call `generateImages` with the text prompt
const response = await model.generateImages(prompt)

// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (response.filteredReason) {
  console.log(response.filteredReason);
}

if (response.images.length == 0) {
  throw new Error("No images in the response.")
}

const image = response.images[0];

بعد از


import { initializeApp } from "firebase/app";
import {
  getAI,
  getGenerativeModel,
  GoogleAIBackend,
  ResponseModality,
  ImageConfigAspectRatio,
  FinishReason
} from "firebase/ai";

// TODO(developer) Replace the following with your app's Firebase configuration
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create a `GenerativeModel` instance with a model that supports your use case
const model = getGenerativeModel(ai, {
  model: "GEMINI_IMAGE_MODEL_NAME",
  generationConfig: {
    responseModalities: [ResponseModality.IMAGE],
    imageConfig: {
      aspectRatio: ImageConfigAspectRatio.LANDSCAPE_4x3
    }
  },
});

// Provide an image generation prompt
const prompt = "An astronaut riding a horse.";

// To generate an image, call `generateContent` with the text prompt
const result = await model.generateContent(prompt);

// Handle the generated image
try {
  const response = result.response;
  if (response.candidates?.[0].finishReason == FinishReason.NO_IMAGE) {
    // Handle the case where no images were generated
  }
  const inlineDataParts = response.inlineDataParts();
  if (inlineDataParts?.[0]) {
    const image = inlineDataParts[0].inlineData;
    // Use this mimeType and base64 data to display the image using
    // your preferred tooling
    console.log(image.mimeType, image.data);
  }
} catch (err) {
  console.error('Prompt or candidate was blocked:', err);
}

Dart

قبل از


import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

// Initialize FirebaseApp
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Gemini Developer API backend service
final ai = FirebaseAI.googleAI();

// Create an `ImagenModel` instance with an Imagen model that supports your use case
final model = ai.imagenModel(model: 'IMAGEN_MODEL_NAME');

// Provide an image generation prompt
const prompt = 'An astronaut riding a horse.';

// To generate an image, call `generateImages` with the text prompt
final response = await model.generateImages(prompt);

if (response.images.isNotEmpty) {
  final image = response.images[0];
  // Process the image
} else {
  // Handle the case where no images were generated
  print('Error: No images were generated.');
}

بعد از


import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

// Initialize FirebaseApp
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Gemini Developer API backend service
final ai = FirebaseAI.googleAI();

// Create a `GenerativeModel` instance with a Gemini model that supports image output
final model = ai.generativeModel(
  model: 'GEMINI_IMAGE_MODEL_NAME',
  generationConfig: GenerationConfig(
    responseModalities: [ResponseModalities.image],
    imageConfig: ImageConfig(aspectRatio: ImageAspectRatio.landscape4x3)
  ),
);

// Provide a text prompt instructing the model to generate an image
final prompt = [Content.text('An astronaut riding a horse.')];

// To generate an image, call `generateContent` with the text prompt
final response = await model.generateContent(prompt);
if (response.inlineDataParts.isNotEmpty) {
  final imageBytes = response.inlineDataParts.first.bytes;
  // Process the image
} else {
  // Handle the case where no images were generated
  print('Error: No images were generated.');
}

وحدت

قبل از


using Firebase.AI;

// Initialize the Gemini Developer API backend service
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());

// Create an `ImagenModel` instance with a model that supports your use case
var model = ai.GetImagenModel(modelName: "IMAGEN_MODEL_NAME");

// Provide an image generation prompt
var prompt = "An astronaut riding a horse";

// To generate an image, call `generateImages` with the text prompt
var response = await model.GenerateImagesAsync(prompt: prompt);

// Handle the generated image
if (response.Images.Count == 0) {
  throw new Exception("No image in the response.");
}
var image = response.Images[0].AsTexture2D();

بعد از


using Firebase;
using Firebase.AI;

// Initialize the Gemini Developer API backend service
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());

// Create a `GenerativeModel` instance with a Gemini model that supports image output
var model = ai.GetGenerativeModel(
  modelName: "GEMINI_IMAGE_MODEL_NAME",
  generationConfig: new GenerationConfig(
    responseModalities: new[] { ResponseModality.Image },
    imageConfig: new ImageConfig(aspectRatio: ImageConfig.AspectRatio.Landscape4x3)
  )
);

// Provide an image generation prompt
var prompt = "An astronaut riding a horse";

// To generate an image, call `GenerateContentAsync` with the text prompt
var response = await model.GenerateContentAsync(prompt);

if (response.Candidates.First().FinishReason == FinishReason.NoImage) {
  // Handle the case where no images were generated
}

// Handle the generated image
var imageParts = response.Candidates.First().Content.Parts
                         .OfType<ModelContent.InlineDataPart>()
                         .Where(part => part.MimeType == "image/png");

foreach (var imagePart in imageParts) {
  // Load the Image into a Unity Texture2D object
  UnityEngine.Texture2D texture2D = new(2, 2);
  if (texture2D.LoadImage(imagePart.Data.ToArray())) {
    // Do something with the image
  }
}

گزینه‌های پیکربندی جایگزین

این بخش گزینه‌های جایگزینی برای گزینه‌های مختلف پیکربندی مدل را شرح می‌دهد تا به کنترل پاسخ مدل کمک کند.

تنظیمات ایمنی

شما تنظیمات ایمنی را برای مدل‌های Imagen با استفاده از ImagenSafetySettings پیکربندی می‌کنید. با این حال، برای مدل‌های Gemini Image، باید به استفاده از SafetySetting مهاجرت کنید.

پارامترهای پیکربندی مدل

شما مدل‌های Imagen را با ImagenGenerationConfig پیکربندی می‌کنید. با این حال، برای مدل‌های Gemini Image، باید به استفاده از GenerationConfig و به صورت اختیاری یک ImageConfig تو در تو مهاجرت کنید (این قابلیت از نسخه‌های اولیه SDKهای مه ۲۰۲۶ در دسترس است).

به عنوان بخشی از GenerationConfig ، یک روش پاسخ IMAGE تنظیم کنید (همانطور که در نمونه‌های کد "بعد" در این راهنما نشان داده شده است). توجه داشته باشید که می‌توانید به صورت اختیاری مدل‌های تصویر Gemini را طوری پیکربندی کنید که هم IMAGE و هم TEXT برگردانند.

برای درک نحوه انتقال پارامترهای پیکربندی مدل خود از Imagen به مدل‌های Gemini Image، جدول زیر را مرور کنید:

مدل‌های ایمیجن مدل‌های تصویر جمینی ("نانو موز")
addWatermark

پشتیبانی نمی‌شود

مدل‌های تصویر Gemini همیشه تصاویر تولید شده را با واترمارک SynthID برمی‌گردانند.

aspectRatio

استفاده از aspectRatio در ImageConfig

برای نمونه‌های کد و مقادیر پشتیبانی‌شده، به بخش «پیکربندی تولید تصویر» در راهنمای مدل‌های تصویر Gemini مراجعه کنید.

imageFormat

پشتیبانی نمی‌شود

مدل‌های تصویر Gemini همیشه تصاویر تولید شده را با فرمت PNG برمی‌گردانند.

negativePrompt

پشتیبانی نمی‌شود

توجه داشته باشید که اعلان‌های منفی یک ویژگی قدیمی هستند و از آن زمان پشتیبانی نمی‌شوند. imagen-3.0-generate-002 (یا توسط هر یک از مدل‌های Imagen 4 ).

numberOfImages

پشتیبانی نمی‌شود

مدل‌های تصویر Gemini همیشه یک تصویر تولید شده واحد را برمی‌گردانند.
به عنوان یک راه حل، می‌توانید تولید خود را در یک حلقه اجرا کنید تا به همان نتیجه برسید. توجه داشته باشید که تعداد کاندیداها به عنوان جایگزین کار نمی‌کند.

personGeneration

پشتیبانی نمی‌شود

به طور پیش‌فرض، مدل‌های تصویر Gemini امکان تولید تصاویر افراد را فراهم می‌کنند.