Panggil model gambar Gemini (Nano Banana 2 / Pro) di CometAPI menggunakan Google Gen AI SDK untuk text-to-image, image-to-image, dan komposisi multi-gambar.
Panduan ini menunjukkan cara menggunakan model gambar Gemini melalui CometAPI dengan Google Gen AI SDK. Panduan ini mencakup:
Hasilkan gambar dari prompt teks dan simpan ke file.
from google import genaifrom google.genai import typesfrom PIL import Imageimport osclient = 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"], ),)final_image = Nonefor part in response.parts: if getattr(part, "thought", False): continue if part.text is not None: print(part.text) elif part.inline_data is not None: final_image = part.as_image()if final_image: final_image.save("generated_image.png") print("Image saved to generated_image.png")
Simpan bagian gambar final:Data gambar berada di candidates[0].content.parts, yang dapat berisi bagian teks dan/atau gambar. Model gambar Gemini juga dapat mengembalikan bagian thought perantara sebelum gambar final, terutama saat Anda meminta teks dan gambar sekaligus atau secara eksplisit mengaktifkan output thinking. Jangan langsung menyimpan inlineData pertama; lewati bagian dengan thought bernilai true, lalu simpan bagian gambar terakhir yang tersisa.Respons tipikal yang hanya berisi gambar final:
Unggah gambar input dan transformasikan dengan Prompt teks.
from google import genaifrom google.genai import typesfrom PIL import Imageimport osclient = genai.Client( http_options={"api_version": "v1beta", "base_url": "https://api.cometapi.com"}, api_key=os.environ.get("COMETAPI_KEY"),)# Load the source imagesource_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"], ),)final_image = Nonefor part in response.parts: if getattr(part, "thought", False): continue if part.text is not None: print(part.text) elif part.inline_data is not None: final_image = part.as_image()if final_image: final_image.save("watercolor_output.png")
SDK Python menerima objek PIL.Image secara langsung — tidak perlu encoding Base64 manual.
Jangan sertakan prefiks data:image/jpeg;base64, saat meneruskan string Base64 mentah.
Gabungkan beberapa image sumber menjadi satu kolase, lalu deskripsikan output yang diinginkan.
from google import genaifrom google.genai import typesfrom PIL import Imageimport osclient = 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"], ),)final_image = Nonefor part in response.parts: if getattr(part, "thought", False): continue if part.inline_data is not None: final_image = part.as_image()if final_image: final_image.save("composition_output.png")
Tentukan image_config dengan aspect_ratio dan image_size untuk output resolusi tinggi:
from google import genaifrom google.genai import typesimport osclient = 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", ), ),)final_image = Nonefor part in response.parts: if getattr(part, "thought", False): continue if part.text is not None: print(part.text) elif image := part.as_image(): final_image = imageif final_image: final_image.save("butterfly_4k.png")
Untuk permintaan resolusi tinggi, nilai output berdasarkan bagian gambar non-thought terakhir. Jika integrasi Anda menyimpan bagian inlineData pertama, integrasi tersebut mungkin menyimpan gambar thought perantara yang resolusinya lebih rendah daripada imageSize yang diminta.
Gunakan fitur chat SDK untuk menyempurnakan gambar secara iteratif:
from google import genaifrom google.genai import typesimport osclient = 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: Generateresponse = chat.send_message( "Create a vibrant infographic explaining photosynthesis as a recipe, styled like a colorful kids cookbook")final_image = Nonefor part in response.parts: if getattr(part, "thought", False): continue if part.text is not None: print(part.text) elif image := part.as_image(): final_image = imageif final_image: final_image.save("photosynthesis.png")
Tentukan kata kunci gaya (misalnya, “cyberpunk, grain film, kontras rendah”), aspect ratio, subjek, latar belakang, pencahayaan, dan tingkat detail.
Format Base64
Saat menggunakan HTTP mentah, jangan sertakan prefiks data:image/png;base64, — gunakan hanya string Base64 mentah. SDK Python menangani ini secara otomatis dengan objek PIL.Image.
Paksa output gambar
Setel "responseModalities" ke ["IMAGE"] saja untuk menjamin output gambar tanpa teks.
Mengapa gambar saya buram atau resolusinya lebih rendah?
Periksa apakah kode Anda menyimpan gambar thought perantara. Respons gambar Gemini dapat menyertakan bagian gambar di mana thought bernilai true; ini bukan output akhir. Lewati bagian thought: true dan simpan bagian gambar terakhir di mana inlineData ada dan thought tidak bernilai true. Jika Anda tidak memerlukan output teks, minta "responseModalities": ["IMAGE"] untuk mengurangi penanganan respons campuran teks/gambar.