Claude Opus 5.5 est disponible sur SeedRouter
SeedRouter Docs

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.

View Markdown

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èleCanalFacturation
gemini-3.1-flash-lite-image-officialOfficialTarifs 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êteValeur
AuthorizationBearer YOUR_API_KEY
Content-Typeapplication/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

NomTypeRequisPar défautRemarques
modelstringOui—L'ID de modèle ci-dessus.
contentsContent[]Oui—1 à 32 tours. Chacun contient parts et un role facultatif (user ou model) ; le dernier tour est user.
contents[].parts[].textstring——Une partie texte. Au moins une partie texte est requise.
contents[].parts[].fileDataobjectNon—{"mimeType": "...", "fileUri": "https://..."} ; une référence image, vidéo ou PDF. Jusqu'à 14 au total.
systemInstructionobjectNon—{"parts": [{"text": "..."}]}.
safetySettingsobject[]Non—Paires {"category", "threshold"} ; voir ci-dessous.
generationConfig.responseModalitiesenum[]Nontexte et image["IMAGE"] pour des images uniquement, ou ["TEXT", "IMAGE"].
generationConfig.imageConfig.aspectRatioenumNonRatio de l'image d'entrée, sinon 1:11: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.imageSizeenumNon1KUniquement 1K.
generationConfig.candidateCountintegerNon1Uniquement 1. Une requête renvoie une image.
generationConfig.temperaturenumberNonValeur par défaut du modèle0 à 2.
generationConfig.topPnumberNonValeur par défaut du modèle0 à 1.
generationConfig.topKintegerNonValeur par défaut du modèle1 ou plus.
generationConfig.seedintegerNon—Entier 32 bits.
generationConfig.maxOutputTokensintegerNonValeur par défaut du modèle1 à 4 096.
generationConfig.stopSequencesstring[]Non—Jusqu'à 5.
generationConfig.mediaResolutionenumNonValeur par défaut du modèleMEDIA_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.includeThoughtsbooleanNonfalseRenvoie les résumés de réflexion du modèle dans output.thoughts.
generationConfig.thinkingConfig.thinkingLevelenumNonMINIMALMINIMAL 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

imageSizeSortie 1:1Tokens d'image
1K1024×10241 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érationParamètres
Texte vers imageune partie texte
Édition ou compositionpartie texte + une ou plusieurs parties fileData
Édition multi-tourstours 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}
    }
  }
}
ChampSignification
idConservez cet identifiant pour les requêtes ultérieures.
statusprocessing, completed ou failed.
created_at, finished_atHorodatages Unix en secondes.
output.data[].urlURL de l'image générée.
output.textTexte renvoyé par le modèle avec l'image, lorsque responseModalities inclut TEXT. Les réflexions n'y figurent pas.
output.thoughtsRé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_formatFormat d'image réel.
output.partsLes 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.usageUtilisation de tokens. output_tokens compte la sortie texte, réflexion et image ; output_tokens_details.image_tokens correspond à la partie image.
errorErreur 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.

Ressources liées