Kursus
Beberapa minggu lalu, ChatGPT viral dengan model pembuatan gambar terbarunya. Model ini sejauh ini yang terbaik yang pernah saya lihat. Kemampuan mengedit gambarnya yang membuatnya menonjol. Akurasinya luar biasa dan membuat imajinasi sangat mudah diwujudkan. Model lain juga bisa melakukannya, tetapi tidak dengan tingkat akurasi yang sama.
Membuat gambar di antarmukanya itu mudah, karena kita hanya perlu memberikan prompt teks. Namun, sebagai programmer, saya menantikan ketersediaannya di API agar bisa berinteraksi secara terprogram. Hari itu akhirnya tiba, dan saya menulis blog ini untuk mengajari Anda cara menggunakannya dengan Python.
Jika Anda hanya tertarik mempelajari cara menggunakannya di antarmuka chat, sebelumnya saya menulis panduan pembuatan gambar GPT-4o dengan delapan contoh praktis. Anda juga dapat menemukan artikel terbaru kami yang membahas ChatGPT Images terbaru, menggunakan model GPT-Image-1.5.
Penyiapan API GPT-Image-1
Model gambar GPT yang baru dilindungi, artinya diperlukan verifikasi tambahan untuk dapat menggunakannya. Pada bagian ini, kami menjelaskan cara menyiapkan API. Jika Anda sudah memiliki kunci API, Anda bisa melewati langkah pertama.
Langkah 1: Buat kunci API
Langkah pertama adalah membuat kunci API. Kita dapat membuatnya dengan masuk ke platform mereka dan menavigasi ke halaman API keys. Lalu, klik tombol "Create new secret key".
Setelah kunci dibuat, buat berkas bernama .env dan salin dengan format berikut:
OPENAI_API_KEY=<paste_your_api_key_here>
Langkah 2: Verifikasi organisasi kita
Perbedaan besar dengan model OpenAI lainnya adalah penggunaan API gambar GPT mengharuskan kita memverifikasi organisasi. Alasannya, GPT-Image-1 dapat menghasilkan gambar yang realistis dan detail, yang menimbulkan kekhawatiran tentang potensi penyalahgunaan, seperti membuat deepfake atau konten yang tidak pantas. Dengan memverifikasi organisasi, OpenAI dapat memantau penggunaan dengan lebih baik dan menegakkan kebijakan keamanannya.
Anda dapat memverifikasi organisasi meski Anda tidak memiliki perusahaan. Namun, perhatikan bahwa proses ini memerlukan pemberian KTP/paspor resmi dan menyelesaikan verifikasi wajah.
Untuk melakukan verifikasi, buka tab general di platform OpenAI API dan klik tombol di bagian "Verifications".
Proses ini dilakukan oleh pihak ketiga dan terdiri dari:
- Mengunggah foto dokumen identitas.
- Menggunakan kamera ponsel untuk memverifikasi bahwa identitas Anda cocok dengan dokumen yang diberikan.
Prosesnya hanya membutuhkan beberapa menit untuk diselesaikan, lalu sekitar 15 menit untuk diproses.
Penyiapan Python
Untuk tutorial ini, kita akan memasang paket Python berikut:
openai: Paket resmi OpenAI yang memungkinkan kita berinteraksi dengan API mereka.dotenv: Paket Python yang memudahkan memuat kunci API secara aman dari berkas.envyang kita buat di atas.
Kita dapat memasangnya dengan perintah:
pip install openai dotenv
Membuat Gambar Pertama Kita dengan GPT-Image-1
Mari lihat cara kita dapat membuat gambar dengan gpt-image-1. Mulailah dengan membuat berkas Python baru, misalnya, generate_image.py, di folder yang sama dengan berkas .env.
Lalu, impor paket yang diperlukan:
# Import the packages
from openai import OpenAI
from dotenv import load_dotenv
import os
import base64
import time
Perhatikan bahwa os dan base64 adalah paket bawaan Python dan tidak perlu dipasang.
Selanjutnya, kita memuat kunci API dan menginisialisasi klien OpenAI:
# Load the API key
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
# Initialize the OpenAI client
client = OpenAI(api_key=api_key)
Kemudian, kita meminta pengguna memasukkan prompt teks menggunakan fungsi bawaan input() dan mengirim permintaan pembuatan gambar ke API:
# Ask the user to input a prompt in the terminal
print("What do you want to generate?")
prompt = input("> ")
print("Generating image...")
# Send the prompt to the API
img = client.images.generate(
model="gpt-image-1",
prompt=prompt,
background="auto",
n=1,
quality="high",
size="1024x1024",
output_format="png",
moderation="auto",
)
Terakhir, kita menyimpan gambar yang dihasilkan ke dalam berkas:
# Save the image into a file
image_bytes = base64.b64decode(img.data[0].b64_json)
with open(f"output_{int(time.time())}.png", "wb") as f:
f.write(image_bytes)
Skrip lengkapnya dapat ditemukan di sini. Untuk menjalankan skrip ini, gunakan perintah:
python generate_image.py
Berikut contoh dengan keluarannya:

Parameter GPT-Image-1
Pada bagian ini, kami menjelaskan parameter paling relevan dari model gpt-image-1:
prompt: Instruksi tekstual yang menjelaskan gambar apa yang ingin kita buat dengan model.background: Jenis latar belakang untuk gambar. Harus salah satu dari"transparent","opaque", atau"auto". Nilai default adalah"auto", di mana model akan memutuskan berdasarkan konten jenis latar belakang apa yang terbaik. Perhatikan bahwa gambar JPEG tidak mendukung latar belakang transparan.n: Jumlah gambar yang akan dibuat. Harus bernilai dari 1 hingga 10.quality: Kualitas gambar yang dihasilkan. Harus salah satu dari"high","medium", atau"low", dengan default"high".size: Ukuran gambar dalam piksel. Harus salah satu dari"1024x1024"(persegi),"1536x1024"(lanskap),"1024x1536"(potret).output_format: Format gambar. Harus salah satu dari"png","jpeg", atau"webp". Default-nya adalah"png".moderation: Tingkat moderasi konten. Harus"low"untuk filter yang kurang ketat atau"auto", yang merupakan default.
Kita telah membahas parameter terpenting yang tersedia untuk model gpt-image-1. Untuk detail lebih lanjut dan daftar lengkap parameter, lihat dokumentasi API resmi.
Dampak parameter quality
Berikut perbandingan berdampingan gambar yang dibuat menggunakan prompt yang sama dengan kualitas berbeda:

Kita melihat kucing pertama (dengan kualitas terendah) memiliki beberapa artefak di sekitar mata, dan gambar menjadi jauh lebih realistis seiring peningkatan kualitas.
Berikut contoh lain dengan keluaran bergaya kartun:

Dalam kasus ini, kita juga melihat bahwa semakin tinggi kualitas, gambar semakin rapi. Namun, menurut saya, ini kurang relevan untuk konten yang memang tidak dimaksudkan realistis.
Ingat bahwa semakin tinggi kualitas, semakin tinggi pula biaya dan waktu komputasi, jadi ada baiknya mencari kompromi yang tepat, bergantung pada kasus penggunaan. Saya sarankan mencoba parameter dari rendah ke tinggi untuk melihat nilai minimum yang memberikan hasil yang dapat diterima untuk tiap kasus.
Parameter background
Dalam eksperimen saya, saya menemukan bahwa model sebagian besar mengabaikan parameter ini. Berikut contoh berdampingan saat saya mengubah parameter background dan instruksi transparansi dalam prompt:

Pada contoh pertama, parameter transparansi diabaikan. Pada contoh kedua, saya menambahkan instruksi transparansi ke prompt, dan hasilnya sedikit lebih baik. Pada contoh terakhir, saya meminta latar belakang buram (opaque) tetapi menentukan saya ingin stiker di prompt dan mendapatkan latar belakang transparan.
Saya tetap merekomendasikan menggunakan parameter agar sesuai dengan keinginan Anda, tetapi pastikan juga menyebutkan hasil yang diinginkan dalam prompt untuk mempertegasnya.
Mengedit Gambar dengan GPT-Image-1
Seperti saya sebutkan di pendahuluan, bagian paling menarik dari GPT-Image-1 adalah kemampuannya mengedit gambar. Mari mulai dengan mempelajari cara memintanya mengedit gambar lalu mengeksplor beberapa kasus penggunaan.
Untuk mengedit gambar, sebagian besar kode dapat digunakan kembali. Satu-satunya bagian yang berubah adalah alih-alih menggunakan fungsi client.images.generate(), kita menggunakan fungsi client.images.edit().
Berikut contohnya:
img = client.images.edit(
model="gpt-image-1",
image=[
open("my-image.jpg", "rb"),
],
prompt=prompt,
n=1,
quality="high",
size="1024x1536",
)
Parameter barunya adalah image. Ini adalah daftar gambar masukan yang akan digunakan dalam pengeditan. Dalam kasus ini, kita hanya memberikan satu gambar bernama my-image.jpg yang berada di folder yang sama dengan skrip.
Berikut contoh menggunakan GPT Image 1 untuk mengedit salah satu foto saya:

Perhatikan bahwa karena gambar asli memiliki rasio potret, saya menggunakan ukuran potret 1024x1536. Namun, ini bukan rasio yang sama dengan gambar asli. Bahkan dalam mode pengeditan, model hanya dapat menghasilkan gambar dalam tiga ukuran yang disebutkan di atas.
Skrip pengeditan lengkapnya dapat ditemukan di sini.
Menggunakan mask
Mode pengeditan menyediakan parameter mask yang dapat kita gunakan untuk menentukan area mana yang harus diedit pada gambar. Mask harus berupa gambar PNG maksimal 4 MB dan memiliki ukuran yang sama dengan gambar. Area dengan transparansi 100% adalah area yang boleh diedit oleh GPT Image 1.
Kita memberikan mask dengan cara yang sama seperti gambar, kecuali kali ini bukan berupa daftar:
img = client.images.edit(
model="gpt-image-1",
image=[
open(sys.argv[1], "rb"),
],
# We provide the mask like this
mask=open("mask.png", "rb"),
prompt=prompt,
n=1,
quality="high",
size="1536x1024",
)
Namun, saat saya mencobanya, hasilnya kurang baik, dan saya melihat laporan serupa dari orang lain di internet.
Berikut contohnya:

Saya juga mencoba menggunakannya untuk menambahkan elemen di lokasi spesifik, dan hasilnya tidak konsisten. Sama seperti penggunaan parameter background untuk pembuatan gambar, saya menemukan bahwa mendeskripsikan keinginan saya dalam prompt memberikan hasil terbaik.
Menggunakan beberapa gambar
Model dapat memproses dan menggabungkan beberapa gambar sekaligus. Pada contoh di bawah, kita menggunakannya untuk membuat poster pemasaran dengan menggabungkan gambar dari tiga minuman ini:

Kita memberikan ketiga gambar tersebut sebagai daftar di parameter image, sebagai berikut:
prompt = """
Create a vibrant and eye-catching marketing poster to
promote the cold drinks offerings at our coffee shop.
"""
img = client.images.edit(
model="gpt-image-1",
# We can provide multiple images at once
image=[
open("latte.png", "rb"),
open("americano.png", "rb"),
open("icetea.png", "rb"),
],
prompt=prompt,
size="1536x1024",
)
Berikut hasilnya:

Harga GPT-Image-1
Pembuatan gambar dikenakan biaya berdasarkan:
- Jumlah token dalam prompt teks.
- Jumlah token dalam gambar masukan.
- Jumlah token dalam gambar keluaran.

Terkadang sulit membayangkan biaya ini karena kita tidak tahu berapa banyak token yang terkandung dalam sebuah gambar.
Karena dimensi gambar keluaran sudah diketahui, kita tahu berapa banyak token yang diperlukan untuk masing-masing, jadi kita dapat memberikan nilai pasti untuk harga token gambar keluaran (yang merupakan bagian paling mahal):

Harga ini bergantung pada kualitas dan ukuran gambar. Untuk detail lebih lanjut, lihat halaman harga GPT Image 1.
Saat kita membuat gambar, API mengembalikan jumlah token yang digunakan, sehingga kita dapat mengombinasikannya dengan informasi di atas untuk mengetahui dengan tepat berapa biayanya.
Kita bisa menampilkan jumlah token yang digunakan dengan mencetak field usage dari hasil:
img = client.images.generate(
model="gpt-image-1",
prompt=prompt,
background="transparent",
n=1,
quality="medium",
size="1024x1024",
moderation="auto",
output_format="png",
)
# Add this to see the usage
print("Prompt tokens:", img.usage.input_tokens_details.text_tokens)
print("Input images tokens:", img.usage.input_tokens_details.image_tokens)
print("Output image tokens:", img.usage.output_tokens)
Keluaran:
Prompt tokens: 8
Input images tokens: 0
Output image tokens: 272
Kesimpulan
Terlepas dari beberapa kekurangan pada API, seperti masking dan transparansi yang belum cukup andal, model ini dapat mengeksekusi instruksi dalam prompt dengan presisi tinggi.
Saya pikir model ini membuka banyak kemungkinan untuk membangun berbagai hal di sekitarnya. Dalam tutorial ini, kita mempelajari dasar-dasar cara menggunakannya. Berikut beberapa ide yang mungkin ingin Anda eksplorasi untuk dikembangkan dari apa yang Anda pelajari di sini:
- Mempermudah konversi foto makanan dari ponsel menjadi fotografi makanan yang indah untuk digunakan restoran di menu mereka.
- Berdasarkan foto teman atau swafoto, buat paket stiker yang mengekspresikan berbagai emosi untuk digunakan di aplikasi chat.
- Buat alat yang, berdasarkan deskripsi tiap adegan, membuat strip komik dari adegan-adegan tersebut.

