Claude Opus 5.5 est disponible sur SeedRouter
SeedRouter Docs

Nano Banana Pro (Gemini 3 Pro Image)

Génération et édition d'images avec Nano Banana Pro via un point de terminaison asynchrone au format generateContent de Google : réflexion intégrée, sortie 4K, 14 références.

View Markdown

Nano Banana Pro est le modèle Gemini 3 Pro Image de Google, conçu pour les visuels professionnels et les instructions complexes. Il réfléchit avant de dessiner, les réponses indiquent donc des tokens de raisonnement. 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-pro-imageStandardUn prix fixe par image livrée
gemini-3-pro-image-officialOfficialTarifs au token pour l'entrée, la sortie texte/réflexion et la sortie image

Les deux ID acceptent les mêmes paramètres. 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-pro-image",
    "contents": [{"parts": [{"text": "A ceramic teapot on a linen tablecloth, soft window light"}]}],
    "generationConfig": {
      "responseModalities": ["IMAGE"],
      "imageConfig": {"aspectRatio": "16:9", "imageSize": "2K"}
    }
  }'

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'un des deux 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 image de référence. 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, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9.
generationConfig.imageConfig.imageSizeenumNon1K1K, 2K, 4K. K en majuscule.
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 à 32 768.
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.responseFormat.imageobjectNon—mimeType : IMAGE_JPEG ; delivery : INLINE ; aspectRatio et imageSize sous forme d’énumérations Google, par ex. ASPECT_RATIO_SIXTEEN_BY_NINE et IMAGE_SIZE_TWO_K, avec les mêmes formats et tailles que imageConfig. Non accepté par gemini-3-pro-image-official.

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 ; thinkingLevel n'est pas documenté pour ce modèle. inlineData n'est pas accepté ; transmettez les médias sous forme d'URL fileData. responseFormat.image.delivery n'accepte que INLINE : les images terminées sont toujours renvoyées sous forme d'URL hébergées.

Taille de sortie

imageSizeSortie 1:1Tokens d'image
1K1024×10241 120
2K2048×20481 120
4K4096×40962 000

Les autres ratios d'aspect conservent le même nombre de tokens ; par exemple, 16:9 en 1K donne 1376×768.

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-pro-image",
    "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 images de référence doivent être des URL HTTP(S) publiques pointant vers des fichiers PNG, JPEG, WebP, HEIC ou HEIF, de moins de 50 Mo chacune et de 100 Mo au total. 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-pro-image facture un prix fixe par image livrée, quels que soient la taille ou le prompt. gemini-3-pro-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 taille de l'image est le facteur principal ; voir le tableau ci-dessus.

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-pro-image",
  "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-pro-image",
  "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": 1366,
      "total_tokens": 1393,
      "output_tokens_details": {"image_tokens": 1120, "text_tokens": 95, "reasoning_tokens": 151}
    }
  }
}
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.
  • 2K coûte les mêmes tokens d'image que 1K ; utilisez 4K pour les visuels destinés à l'impression.
  • Enregistrez les images renvoyées dans votre propre stockage si vous avez besoin d'une copie durable.

Ressources liées