Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image)
Génération et édition d'images 1K avec Nano Banana 2 Lite, le modèle d'image de Google à la plus faible latence, via un point de terminaison asynchrone au format generateContent.
Nano Banana 2 Lite est le modèle Gemini 3.1 Flash Lite Image de Google, le membre de la famille à faible latence et à faible coût. Il effectue le rendu en 1K. Envoyez le corps de requête generateContent de Google avec un champ model, conservez l'identifiant de tâche renvoyé et interrogez cette tâche pour obtenir l'image terminée. Les images de référence se placent dans contents sous forme d'URL fileData.
ID de modèle
| ID de modèle | Canal | Facturation |
|---|---|---|
gemini-3.1-flash-lite-image-official | Official | Tarifs au token pour l'entrée, la sortie texte/réflexion et la sortie image |
Nano Banana 2 Lite est proposé uniquement avec une facturation au token. Consultez la page du modèle pour les prix actuels.
Exemple rapide
curl https://api.seedrouter.ai/v1/images/generations \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.1-flash-lite-image-official",
"contents": [{"parts": [{"text": "A ceramic teapot on a linen tablecloth, soft window light"}]}],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {"aspectRatio": "16:9", "imageSize": "1K"}
}
}'Point de terminaison
POST https://api.seedrouter.ai/v1/images/generations| En-tête | Valeur |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
Le corps est la requête generateContent de Google avec un seul ajout : model, car ce point de terminaison ne porte aucun modèle dans son chemin. La réponse contient un identifiant de tâche, pas l'image terminée. Conservez les clés API dans du code côté serveur. L'appel direct à /v1beta/models/...:generateContent n'est pas pris en charge ; utilisez ce point de terminaison.
Paramètres
| Nom | Type | Requis | Par défaut | Remarques |
|---|---|---|---|---|
model | string | Oui | — | L'ID de modèle ci-dessus. |
contents | Content[] | Oui | — | 1 à 32 tours. Chacun contient parts et un role facultatif (user ou model) ; le dernier tour est user. |
contents[].parts[].text | string | — | — | Une partie texte. Au moins une partie texte est requise. |
contents[].parts[].fileData | object | Non | — | {"mimeType": "...", "fileUri": "https://..."} ; une référence image, vidéo ou PDF. Jusqu'à 14 au total. |
systemInstruction | object | Non | — | {"parts": [{"text": "..."}]}. |
safetySettings | object[] | Non | — | Paires {"category", "threshold"} ; voir ci-dessous. |
generationConfig.responseModalities | enum[] | Non | texte et image | ["IMAGE"] pour des images uniquement, ou ["TEXT", "IMAGE"]. |
generationConfig.imageConfig.aspectRatio | enum | Non | Ratio de l'image d'entrée, sinon 1:1 | 1:1, 1:4, 4:1, 1:8, 8:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9. |
generationConfig.imageConfig.imageSize | enum | Non | 1K | Uniquement 1K. |
generationConfig.candidateCount | integer | Non | 1 | Uniquement 1. Une requête renvoie une image. |
generationConfig.temperature | number | Non | Valeur par défaut du modèle | 0 à 2. |
generationConfig.topP | number | Non | Valeur par défaut du modèle | 0 à 1. |
generationConfig.topK | integer | Non | Valeur par défaut du modèle | 1 ou plus. |
generationConfig.seed | integer | Non | — | Entier 32 bits. |
generationConfig.maxOutputTokens | integer | Non | Valeur par défaut du modèle | 1 à 4 096. |
generationConfig.stopSequences | string[] | Non | — | Jusqu'à 5. |
generationConfig.mediaResolution | enum | Non | Valeur par défaut du modèle | MEDIA_RESOLUTION_LOW, MEDIA_RESOLUTION_MEDIUM, MEDIA_RESOLUTION_HIGH. Détermine le nombre de tokens utilisés par les médias d'entrée. |
generationConfig.thinkingConfig.includeThoughts | boolean | Non | false | Renvoie les résumés de réflexion du modèle dans output.thoughts. |
generationConfig.thinkingConfig.thinkingLevel | enum | Non | MINIMAL | MINIMAL ou HIGH. |
Catégories de sécurité : HARM_CATEGORY_HARASSMENT, HARM_CATEGORY_HATE_SPEECH, HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT. Seuils : BLOCK_NONE, BLOCK_ONLY_HIGH, BLOCK_MEDIUM_AND_ABOVE, BLOCK_LOW_AND_ABOVE, OFF.
Les champs inconnus sont rejetés. Pas encore disponibles : l'ancrage Google Search (tools) et le contenu mis en cache. inlineData n'est pas accepté ; transmettez les médias sous forme d'URL fileData.
Taille de sortie
imageSize | Sortie 1:1 | Tokens d'image |
|---|---|---|
1K | 1024×1024 | 1 120 |
Les autres ratios d'aspect conservent le même nombre de tokens.
Modes
Il n'existe ni paramètre de mode distinct ni point de terminaison d'édition.
| Opération | Paramètres |
|---|---|
| Texte vers image | une partie texte |
| Édition ou composition | partie texte + une ou plusieurs parties fileData |
| Édition multi-tours | tours user et model précédents, puis un nouveau tour user (voir la note ci-dessous) |
Pour poursuivre une conversation, reconstruisez le tour model à partir des output.parts de la tâche précédente, dans l'ordre : une partie texte devient {"text": ..., "thoughtSignature": ...} et une partie image devient {"fileData": {"mimeType": "image/<output_format>", "fileUri": <data[image].url>}, "thoughtSignature": ...}. Conservez chaque thoughtSignature exactement tel qu'il a été renvoyé : c'est l'URL de la signature que nous avons stockée pour vous (la signature d'une image 4K pèse plusieurs mégaoctets), et nous la restaurons avant que la requête n'atteigne le modèle. Seules les signatures issues de vos propres résultats de tâche sont acceptées.
Éditer avec une image de référence
curl https://api.seedrouter.ai/v1/images/generations \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.1-flash-lite-image-official",
"contents": [{
"role": "user",
"parts": [
{"text": "Turn this photo into a watercolor painting. Keep the composition."},
{"fileData": {"mimeType": "image/jpeg", "fileUri": "https://example.com/photo.jpg"}}
]
}]
}'Remplacez l'URL d'exemple par votre propre image accessible.
Entrées média
Cette API n'accepte que des références par URL. Le base64 inlineData, les URL data: et les envois multipart ne sont pas acceptés. Le Playground téléverse les fichiers sélectionnés vers le stockage avant d'en soumettre les URL.
Les références doivent être des URL HTTP(S) publiques de moins de 50 Mo chacune et de 100 Mo au total : images (image/png, image/jpeg, image/webp, image/heic, image/heif), vidéos (video/mp4, video/mpeg, video/mov, video/avi, video/x-flv, video/mpg, video/webm, video/wmv, video/3gpp) ou documents PDF (application/pdf). mimeType doit correspondre au fichier. Les URL sont récupérées pendant le traitement ; une image inaccessible fait échouer la tâche, et une tâche échouée n'est pas facturée.
Facteurs de coût
Consultez la section tarifs du modèle pour les tarifs actuels. gemini-3.1-flash-lite-image-official facture à l'usage : tokens d'entrée (texte et images de référence), tokens de sortie texte et de réflexion, et tokens de sortie image, chacun à son propre tarif. La sortie image est le facteur principal ; chaque image est en 1K.
Consultez les frais définitifs dans l'historique d'utilisation de votre compte. Les tâches échouées ne sont pas facturées.
Schéma de sortie
La soumission renvoie une référence de tâche :
{
"id": "task_...",
"model": "gemini-3.1-flash-lite-image-official",
"status": "processing",
"created_at": 1790310979
}Interroger la tâche
curl https://api.seedrouter.ai/v1/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Interrogez toutes les quelques secondes jusqu'à ce que status vaille completed ou failed. Un dépassement de délai réseau pendant l'interrogation ne signifie pas que la génération a échoué : conservez l'identifiant de tâche et reprenez la vérification. Ne créez pas une autre tâche pour vérifier l'avancement.
Exemple d'interrogation complet
Exécutez ceci après l'exemple de soumission Python ci-dessus.
import time
deadline = time.monotonic() + 600
while time.monotonic() < deadline:
result = requests.get(
f"https://api.seedrouter.ai/v1/tasks/{task_id}",
headers={"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"},
timeout=30,
)
result.raise_for_status()
task = result.json()
if task["status"] == "completed":
for image in task["output"]["data"]:
print(image["url"])
break
if task["status"] == "failed":
raise RuntimeError(task["error"]["message"])
time.sleep(3)
else:
raise TimeoutError(f"Still waiting. Resume polling task {task_id}.")Tâche terminée
{
"id": "task_...",
"model": "gemini-3.1-flash-lite-image-official",
"status": "completed",
"created_at": 1790310979,
"finished_at": 1790311001,
"output": {
"created": 1790310999,
"data": [{"url": "https://static.seedrouter.ai/media/tasks/task_example/0.jpg"}],
"output_format": "jpeg",
"usage": {
"input_tokens": 27,
"output_tokens": 1518,
"total_tokens": 1545,
"output_tokens_details": {"image_tokens": 1120, "text_tokens": 398, "reasoning_tokens": 0}
}
}
}| Champ | Signification |
|---|---|
id | Conservez cet identifiant pour les requêtes ultérieures. |
status | processing, completed ou failed. |
created_at, finished_at | Horodatages Unix en secondes. |
output.data[].url | URL de l'image générée. |
output.text | Texte renvoyé par le modèle avec l'image, lorsque responseModalities inclut TEXT. Les réflexions n'y figurent pas. |
output.thoughts | Résumés de réflexion du modèle, lorsque includeThoughts vaut true. Les images intermédiaires dessinées pendant la réflexion ne sont pas livrées. |
output.output_format | Format d'image réel. |
output.parts | Les parties finales de la réponse, dans l'ordre, pour l'édition multi-tours : {"text", "thoughtSignature"} ou {"image": <index into data>, "thoughtSignature"}. thoughtSignature est une URL ; renvoyez-la sans la modifier. |
output.usage | Utilisation de tokens. output_tokens compte la sortie texte, réflexion et image ; output_tokens_details.image_tokens correspond à la partie image. |
error | Erreur structurée pour une tâche échouée. |
Le streaming (streamGenerateContent) n'est pas pris en charge ; les résultats sont livrés via la tâche.
Erreurs
Les requêtes rejetées avant la création d'une tâche renvoient une erreur HTTP accompagnée d'un objet error. Une tâche qui échoue après acceptation renvoie HTTP 200 à l'interrogation, avec status: "failed" et un objet error. Une image bloquée par les filtres de sécurité du modèle échoue avec content_policy_violation ; une réponse sans image échoue avec no_output.
Voir le catalogue d'erreurs commun pour les codes, les statuts HTTP et les conseils de reprise.
{
"id": "task_...",
"status": "failed",
"error": {
"code": 60001,
"message": "The request was rejected by the content policy. Please revise the prompt or input images."
}
}Si la soumission elle-même dépasse le délai, vérifiez votre historique de tâches avant de soumettre à nouveau : la première requête a peut-être déjà été acceptée.
Conseils
- Décrivez le sujet, le décor, la lumière et le style en phrases complètes.
- Pour une édition, précisez ce qui doit changer et ce qui doit rester identique.
- Choisissez Nano Banana 2 ou Nano Banana Pro si vous avez besoin d'une sortie 2K ou 4K.
- Enregistrez les images renvoyées dans votre propre stockage si vous avez besoin d'une copie durable.
