Todos los modelos de Imagen están obsoletos y dejarán de estar disponibles el 24 de junio de 2026. Esta baja y cierre se aplican en todo Google y tanto a Gemini Developer API como a Vertex AI Gemini API.
Antes de esta fecha de cierre, para evitar interrupciones en el servicio, debes migrar tus apps del uso de modelos Imagen al uso de modelos de imagen Gemini (los modelos "Nano Banana"), como se describe en esta guía.
Si tienes un problema urgente relacionado con esta baja y cierre, comunícate con el equipo de Asistencia de Firebase.
Modelos de imágenes de reemplazo de Gemini
Revisa la siguiente tabla para elegir un modelo de imagen Gemini de reemplazo para tu app.
| en Imagen modelo | Gemini Modelos de imágenes ("Nano Banana") |
|---|---|
imagen-4.0-fast-generate-001 |
gemini-2.5-flash-image (DG)gemini-3.1-flash-image-preview (con nivel de pensamiento
MINIMAL) |
imagen-4.0-generate-001 |
gemini-2.5-flash-image (DG)gemini-3.1-flash-image-preview (con nivel de pensamiento
HIGH) |
imagen-4.0-ultra-generate-001 |
gemini-2.5-flash-image (DG)gemini-3-pro-image-preview |
imagen-3.0-capability-001 |
gemini-2.5-flash-image (DG)gemini-3.1-flash-image-preview |
Migra la app
En esta sección, se muestran ejemplos de antes y después de la migración de un modelo Imagen a un modelo de imagen Gemini.
Genera una imagen a partir de texto
|
Haz clic en tu proveedor de Gemini API para ver el contenido y el código específicos del proveedor en esta página. |
Para generar una imagen a partir de texto, migra tu app:
Usa un modelo de imagen Gemini de reemplazo adecuado (como
gemini-2.5-flash-image).Crea una instancia de
GenerativeModel(en lugar de una instancia deImagenModel).Actualiza las opciones de configuración del modelo para admitir los modelos de imágenes de Gemini.
- Como parte de esta configuración, establece una modalidad de respuesta de
IMAGE.
. Ten en cuenta que los modelos de imágenes de Gemini se pueden configurar para devolver imágenes y texto.
- Como parte de esta configuración, establece una modalidad de respuesta de
(Solo para Vertex AI Gemini API) Actualiza la ubicación desde la que accedes al modelo a una ubicación compatible con los modelos de imagen de Gemini. Te recomendamos
global.
Swift
Antes
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)
Después
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
Antes
// 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()
Después
// 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
Antes
// 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());
Después
// 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
Antes
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];
Después
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
Antes
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.');
}
Después
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.');
}
Unity
Antes
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();
Después
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
}
}
Opciones de configuración de reemplazo
En esta sección, se describen las opciones de reemplazo para varios parámetros de configuración del modelo que ayudan a controlar su respuesta.
Configuración de seguridad
Puedes configurar los parámetros de seguridad de los modelos Imagen con ImagenSafetySettings. Sin embargo, para los modelos de imágenes de Gemini, debes migrar al uso de SafetySetting.
Parámetros de configuración del modelo
Configuras los modelos Imagen con un ImagenGenerationConfig. Sin embargo, para los modelos de Gemini Image, debes migrar para usar un GenerationConfig y, de forma opcional, un ImageConfig anidado (esta opción está disponible a partir de las versiones de principios de mayo de 2026 de los SDKs).
Como parte de GenerationConfig, establece una modalidad de respuesta de IMAGE (como se muestra en los ejemplos de código "después" que se incluyen más arriba en esta guía). Ten en cuenta que, de manera opcional, puedes configurar los modelos de imágenes Gemini para que muestren IMAGE y TEXT.
Revisa la siguiente tabla para comprender cómo migrar los parámetros de configuración de tu modelo de Imagen a los modelos de imagen de Gemini:
| Imagen modelos | Gemini Modelos de imágenes ("Nano Banana") |
|---|---|
addWatermark |
No compatible Gemini Los modelos de imagen siempre devuelven imágenes generadas con una marca de agua de SynthID. |
aspectRatio |
Usa Para obtener muestras de código y valores admitidos, consulta Configura la generación de imágenes en la guía de Gemini Modelos de imágenes. |
imageFormat |
No compatible Gemini Los modelos de imágenes siempre devuelven imágenes generadas en formato PNG. |
negativePrompt |
No compatible
Ten en cuenta que las instrucciones negativas son una función heredada y que no se admiten desde |
numberOfImages |
No compatible
Gemini Los modelos de imágenes siempre devuelven una sola imagen generada.
|
personGeneration |
No compatible De forma predeterminada, los modelos de imágenes de Gemini permiten generar imágenes de personas. |