Passer au contenu principal
Ce guide montre comment utiliser les modèles d’image Gemini via CometAPI à l’aide du Google Gen AI SDK. Il couvre :
  • La génération de texte vers image
  • L’édition d’image vers image
  • La composition multi-image
  • L’enregistrement des images générées
  • URL de base : https://api.cometapi.com
  • Installez le SDK : pip install google-genai (Python) ou npm install @google/genai (Node.js)

Configuration

Initialisez le client avec l’URL de base de CometAPI :
from google import genai
from google.genai import types
import os

COMETAPI_KEY = os.environ.get("COMETAPI_KEY") or "<YOUR_COMETAPI_KEY>"

client = genai.Client(
    http_options={"api_version": "v1beta", "base_url": "https://api.cometapi.com"},
    api_key=COMETAPI_KEY,
)

Génération de texte en image

Générez une image à partir d’un prompt textuel et enregistrez-la dans un fichier.
from google import genai
from google.genai import types
from PIL import Image
import os

client = genai.Client(
    http_options={"api_version": "v1beta", "base_url": "https://api.cometapi.com"},
    api_key=os.environ.get("COMETAPI_KEY"),
)

response = client.models.generate_content(
    model="gemini-3.1-flash-image-preview",
    contents="Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme",
    config=types.GenerateContentConfig(
        response_modalities=["TEXT", "IMAGE"],
    ),
)

for part in response.parts:
    if part.text is not None:
        print(part.text)
    elif part.inline_data is not None:
        image = part.as_image()
        image.save("generated_image.png")
        print("Image saved to generated_image.png")
Structure de la réponse : Les données de l’image se trouvent dans candidates[0].content.parts, qui peut contenir des parties de texte et/ou d’image :
{
  "candidates": [{
    "content": {
      "parts": [
        { "text": "Here is your image..." },
        {
          "inlineData": {
            "mimeType": "image/png",
            "data": "<base64-encoded-image>"
          }
        }
      ]
    }
  }]
}

Génération Image-to-Image

Téléchargez une image d’entrée et transformez-la avec un prompt textuel.
from google import genai
from google.genai import types
from PIL import Image
import os

client = genai.Client(
    http_options={"api_version": "v1beta", "base_url": "https://api.cometapi.com"},
    api_key=os.environ.get("COMETAPI_KEY"),
)

# Load the source image
source_image = Image.open("source.jpg")

response = client.models.generate_content(
    model="gemini-3.1-flash-image-preview",
    contents=["Transform this into a watercolor painting", source_image],
    config=types.GenerateContentConfig(
        response_modalities=["TEXT", "IMAGE"],
    ),
)

for part in response.parts:
    if part.text is not None:
        print(part.text)
    elif part.inline_data is not None:
        image = part.as_image()
        image.save("watercolor_output.png")
  • Le SDK Python accepte directement les objets PIL.Image — aucun encodage Base64 manuel n’est nécessaire.
  • N’incluez pas le préfixe data:image/jpeg;base64, lors du passage de chaînes Base64 brutes.

Composition multi-image

Générez une nouvelle image à partir de plusieurs images d’entrée. CometAPI prend en charge deux approches :

Méthode 1 : Image de collage unique

Combinez plusieurs images source en un seul collage, puis décrivez le résultat souhaité.
Exemple de collage d’entrée
Résultat généré
from google import genai
from google.genai import types
from PIL import Image
import os

client = genai.Client(
    http_options={"api_version": "v1beta", "base_url": "https://api.cometapi.com"},
    api_key=os.environ.get("COMETAPI_KEY"),
)

collage = Image.open("collage.jpg")

response = client.models.generate_content(
    model="gemini-3.1-flash-image-preview",
    contents=[
        "A model is posing and leaning against a pink BMW with a green alien keychain attached to a pink handbag, a pink parrot on her shoulder, and a pug wearing a pink collar and gold headphones",
        collage,
    ],
    config=types.GenerateContentConfig(
        response_modalities=["TEXT", "IMAGE"],
    ),
)

for part in response.parts:
    if part.inline_data is not None:
        part.as_image().save("composition_output.png")

Méthode 2 : Plusieurs images séparées (jusqu’à 14)

Transmettez directement plusieurs images. Les modèles Gemini 3 prennent en charge jusqu’à 14 images de référence (objets + personnages) :
from google import genai
from google.genai import types
from PIL import Image
import os

client = genai.Client(
    http_options={"api_version": "v1beta", "base_url": "https://api.cometapi.com"},
    api_key=os.environ.get("COMETAPI_KEY"),
)

image1 = Image.open("image1.jpg")
image2 = Image.open("image2.jpg")
image3 = Image.open("image3.jpg")

response = client.models.generate_content(
    model="gemini-3.1-flash-image-preview",
    contents=["Merge the three images", image1, image2, image3],
    config=types.GenerateContentConfig(
        response_modalities=["TEXT", "IMAGE"],
    ),
)

for part in response.parts:
    if part.inline_data is not None:
        part.as_image().save("merged_output.png")
Résultat de génération multi-image

Génération d’images 4K

Spécifiez image_config avec aspect_ratio et image_size pour une sortie en haute résolution :
from google import genai
from google.genai import types
import os

client = genai.Client(
    http_options={"api_version": "v1beta", "base_url": "https://api.cometapi.com"},
    api_key=os.environ.get("COMETAPI_KEY"),
)

response = client.models.generate_content(
    model="gemini-3.1-flash-image-preview",
    contents="Da Vinci style anatomical sketch of a Monarch butterfly on textured parchment",
    config=types.GenerateContentConfig(
        response_modalities=["TEXT", "IMAGE"],
        image_config=types.ImageConfig(
            aspect_ratio="1:1",
            image_size="4K",
        ),
    ),
)

for part in response.parts:
    if part.text is not None:
        print(part.text)
    elif image := part.as_image():
        image.save("butterfly_4k.png")

Édition d’images multi-tour (Chat)

Utilisez la fonctionnalité de chat du SDK pour affiner des images de manière itérative :
from google import genai
from google.genai import types
import os

client = genai.Client(
    http_options={"api_version": "v1beta", "base_url": "https://api.cometapi.com"},
    api_key=os.environ.get("COMETAPI_KEY"),
)

chat = client.chats.create(
    model="gemini-3.1-flash-image-preview",
    config=types.GenerateContentConfig(
        response_modalities=["TEXT", "IMAGE"],
    ),
)

# First turn: generate
response = chat.send_message(
    "Create a vibrant infographic explaining photosynthesis as a recipe, styled like a colorful kids cookbook"
)

for part in response.parts:
    if part.text is not None:
        print(part.text)
    elif image := part.as_image():
        image.save("photosynthesis.png")

# Second turn: refine
response = chat.send_message("Update this infographic to be in Spanish. Do not change any other elements.")

for part in response.parts:
    if part.text is not None:
        print(part.text)
    elif image := part.as_image():
        image.save("photosynthesis_spanish.png")

Conseils

Spécifiez des mots-clés de style (par ex. « cyberpunk, grain de film, faible contraste »), le format d’image, le sujet, l’arrière-plan, l’éclairage et le niveau de détail.
Lorsque vous utilisez du HTTP brut, n’incluez pas le préfixe data:image/png;base64, — utilisez uniquement la chaîne Base64 brute. Le SDK Python gère cela automatiquement avec les objets PIL.Image.
Définissez "responseModalities" sur ["IMAGE"] uniquement pour garantir une sortie image sans texte.
Pour plus de détails, consultez la référence d’API. Documentation officielle : Gemini Image Generation