Gemini API mendukung pembuatan gambar menggunakan Gemini 2.0 Flash Experimental dan menggunakan Imagen 3. Panduan ini membantu Anda memulai kedua model tersebut.
Membuat gambar menggunakan Gemini
Gemini 2.0 Flash Experimental mendukung kemampuan untuk menghasilkan teks dan gambar inline. Hal ini memungkinkan Anda menggunakan Gemini untuk mengedit gambar secara percakapan atau membuat output dengan teks yang terjalin (misalnya, membuat postingan blog dengan teks dan gambar dalam satu giliran). Semua gambar yang dihasilkan menyertakan watermark SynthID, dan gambar di Google AI Studio juga menyertakan watermark yang terlihat.
Contoh berikut menunjukkan cara menggunakan Gemini 2.0 untuk menghasilkan output teks dan gambar:
Python
from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO
import base64
client = genai.Client()
contents = ('Hi, can you create a 3d rendered image of a pig '
'with wings and a top hat flying over a happy '
'futuristic scifi city with lots of greenery?')
response = client.models.generate_content(
model="gemini-2.0-flash-exp-image-generation",
contents=contents,
config=types.GenerateContentConfig(
response_modalities=['Text', 'Image']
)
)
for part in response.candidates[0].content.parts:
if part.text is not None:
print(part.text)
elif part.inline_data is not None:
image = Image.open(BytesIO((part.inline_data.data)))
image.save('gemini-native-image.png')
image.show()
Node.js
const { GoogleGenerativeAI } = require("@google/generative-ai");
const fs = require("fs");
const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
async function generateImage() {
const contents = "Hi, can you create a 3d rendered image of a pig " +
"with wings and a top hat flying over a happy " +
"futuristic scifi city with lots of greenery?";
// Set responseModalities to include "Image" so the model can generate an image
const model = genAI.getGenerativeModel({
model: "gemini-2.0-flash-exp-image-generation",
generationConfig: {
responseModalities: ['Text', 'Image']
},
});
try {
const response = await model.generateContent(contents);
for (const part of response.response.candidates[0].content.parts) {
// Based on the part type, either show the text or save the image
if (part.text) {
console.log(part.text);
} else if (part.inlineData) {
const imageData = part.inlineData.data;
const buffer = Buffer.from(imageData, 'base64');
fs.writeFileSync('gemini-native-image.png', buffer);
console.log('Image saved as gemini-native-image.png');
}
}
} catch (error) {
console.error("Error generating content:", error);
}
}
generateImage();
REST
curl -s -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp-image-generation:generateContent?key=$GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{
"parts": [
{"text": "Hi, can you create a 3d rendered image of a pig with wings and a top hat flying over a happy futuristic scifi city with lots of greenery?"}
]
}],
"generationConfig":{"responseModalities":["Text","Image"]}
}' \
| grep -o '"data": "[^"]*"' \
| cut -d'"' -f4 \
| base64 --decode > gemini-native-image.png

Bergantung pada perintah dan konteks, Gemini akan membuat konten dalam mode yang berbeda (teks ke gambar, teks ke gambar dan teks, dll.). Berikut beberapa contohnya:
- Teks ke gambar
- Contoh perintah: "Buat gambar menara Eiffel dengan kembang api di latar belakang."
- Teks ke gambar dan teks (disisipkan)
- Contoh perintah: "Buat resep bergambar untuk paella."
- Gambar dan teks ke gambar dan teks (disisipkan)
- Contoh perintah: (Dengan gambar ruangan yang dilengkapi furnitur) "Sofa warna apa lagi yang cocok untuk ruangan saya? Bisakah Anda memperbarui gambarnya?"
- Pengeditan gambar (teks dan gambar ke gambar)
- Contoh perintah: "Edit gambar ini agar terlihat seperti kartun"
- Contoh perintah: [gambar kucing] + [gambar bantal] + "Buat sulaman silang kucing saya di bantal ini".
- Pengeditan gambar multi-giliran (chat)
- Contoh perintah: [upload gambar mobil biru.] "Ubah mobil ini menjadi mobil konversi." "Sekarang ubah warnanya menjadi kuning."
Pengeditan gambar dengan Gemini
Untuk melakukan pengeditan gambar, tambahkan gambar sebagai input. Contoh berikut menunjukkan cara mengupload gambar berenkode base64. Untuk beberapa gambar dan payload yang lebih besar, lihat bagian input gambar.
Python
from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO
import PIL.Image
image = PIL.Image.open('/path/to/image.png')
client = genai.Client()
text_input = ('Hi, This is a picture of me.'
'Can you add a llama next to me?',)
response = client.models.generate_content(
model="gemini-2.0-flash-exp-image-generation",
contents=[text_input, image],
config=types.GenerateContentConfig(
response_modalities=['Text', 'Image']
)
)
for part in response.candidates[0].content.parts:
if part.text is not None:
print(part.text)
elif part.inline_data is not None:
image = Image.open(BytesIO(part.inline_data.data))
image.show()
Node.js
const { GoogleGenerativeAI } = require("@google/generative-ai");
const fs = require("fs");
const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
async function generateImage() {
// Load the image from the local file system
const imagePath = '/path/to/image.png';
const imageData = fs.readFileSync(imagePath);
const base64Image = imageData.toString('base64');
// Prepare the content parts
const contents = [
{ text: "Hi, This is a picture of me. Can you add a llama next to me?" },
{
inlineData: {
mimeType: 'image/png',
data: base64Image
}
}
];
// Set responseModalities to include "Image" so the model can generate an image
const model = genAI.getGenerativeModel({
model: "gemini-2.0-flash-exp-image-generation",
generationConfig: {
responseModalities: ['Text', 'Image']
},
});
try {
const response = await model.generateContent(contents);
for (const part of response.response.candidates[0].content.parts) {
// Based on the part type, either show the text or save the image
if (part.text) {
console.log(part.text);
} else if (part.inlineData) {
const imageData = part.inlineData.data;
const buffer = Buffer.from(imageData, 'base64');
fs.writeFileSync('gemini-native-image.png', buffer);
console.log('Image saved as gemini-native-image.png');
}
}
} catch (error) {
console.error("Error generating content:", error);
}
}
generateImage();
REST
IMG_PATH=/path/to/your/image1.jpeg
if [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
B64FLAGS="--input"
else
B64FLAGS="-w0"
fi
IMG_BASE64=$(base64 "$B64FLAGS" "$IMG_PATH" 2>&1)
curl -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp-image-generation:generateContent?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d "{
\"contents\": [{
\"parts\":[
{\"text\": \"'Hi, This is a picture of me. Can you add a llama next to me\"},
{
\"inline_data\": {
\"mime_type\":\"image/jpeg\",
\"data\": \"$IMG_BASE64\"
}
}
]
}],
\"generationConfig\": {\"responseModalities\": [\"Text\", \"Image\"]}
}" \
| grep -o '"data": "[^"]*"' \
| cut -d'"' -f4 \
| base64 --decode > gemini-edited-image.png
Batasan
- Untuk performa terbaik, gunakan bahasa berikut: EN, es-MX, ja-JP, zh-CN, hi-IN.
- Pembuatan gambar tidak mendukung input audio atau video.
- Pembuatan gambar mungkin tidak selalu memicu:
- Model hanya dapat menghasilkan teks. Coba minta output gambar secara eksplisit (misalnya, "buat gambar", "berikan gambar saat Anda melakukannya", "perbarui gambar").
- Model mungkin berhenti menghasilkan di tengah jalan. Coba lagi atau coba perintah lain.
- Saat membuat teks untuk gambar, Gemini berfungsi paling baik jika Anda membuat teks terlebih dahulu, lalu meminta gambar dengan teks tersebut.
Pilih model
Model mana yang harus Anda gunakan untuk membuat gambar? Hal ini bergantung pada kasus penggunaan Anda.
Gemini 2.0 paling cocok untuk menghasilkan gambar yang relevan secara kontekstual, menggabungkan teks + gambar, menggabungkan pengetahuan dunia, dan bernalar tentang gambar. Anda dapat menggunakannya untuk membuat visual yang akurat dan relevan secara kontekstual yang disematkan dalam urutan teks yang panjang. Anda juga dapat mengedit gambar secara percakapan, menggunakan bahasa natural, sambil mempertahankan konteks selama percakapan.
Jika kualitas gambar adalah prioritas utama Anda, Imagen 3 adalah pilihan yang lebih baik. Imagen 3 unggul dalam fotorealisme, detail artistik, dan gaya artistik tertentu seperti impresionisme atau anime. Imagen 3 juga merupakan pilihan yang tepat untuk tugas pengeditan gambar khusus seperti memperbarui latar belakang produk, meningkatkan kualitas gambar, dan memasukkan branding dan gaya ke dalam visual. Anda dapat menggunakan Imagen 3 untuk membuat logo atau desain produk bermerek lainnya.
Membuat gambar menggunakan Imagen 3
Gemini API memberikan akses ke Imagen 3, model text-to-image berkualitas terbaik Google, yang menampilkan sejumlah kemampuan baru dan yang ditingkatkan. Imagen 3 dapat melakukan hal berikut:
- Membuat gambar dengan detail yang lebih baik, pencahayaan yang lebih kaya, dan lebih sedikit artefak yang mengganggu dibandingkan model sebelumnya
- Memahami perintah yang ditulis dalam bahasa alami
- Membuat gambar dalam berbagai format dan gaya
- Merender teks secara lebih efektif daripada model sebelumnya
Python
from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO
client = genai.Client(api_key='GEMINI_API_KEY')
response = client.models.generate_images(
model='imagen-3.0-generate-002',
prompt='Fuzzy bunnies in my kitchen',
config=types.GenerateImagesConfig(
number_of_images= 4,
)
)
for generated_image in response.generated_images:
image = Image.open(BytesIO(generated_image.image.image_bytes))
image.show()
REST
curl -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/imagen-3.0-generate-002:predict?key=GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"instances": [
{
"prompt": "Fuzzy bunnies in my kitchen"
}
],
"parameters": {
"sampleCount": 4
}
}'

Saat ini, Imagen hanya mendukung perintah dalam bahasa Inggris dan parameter berikut:
Parameter model Imagen
number_of_images
: Jumlah gambar yang akan dihasilkan, dari 1 hingga 4 (inklusif). Defaultnya adalah 4.aspect_ratio
: Mengubah rasio aspek gambar yang dihasilkan. Nilai yang didukung adalah"1:1"
,"3:4"
,"4:3"
,"9:16"
, dan"16:9"
. Defaultnya adalah"1:1"
.person_generation
: Mengizinkan model membuat gambar orang. Nilai berikut didukung:"DONT_ALLOW"
: Memblokir pembuatan gambar orang."ALLOW_ADULT"
: Membuat gambar orang dewasa, tetapi tidak untuk anak-anak. Ini adalah defaultnya.
Langkah berikutnya
- Untuk mempelajari lebih lanjut cara menulis perintah untuk Imagen, lihat panduan perintah Imagen.
- Untuk mempelajari model Gemini 2.0 lebih lanjut, lihat Model Gemini dan Model eksperimental.