Image generation API adalah endpoint yang menerima deskripsi teks (prompt) dan mengembalikan file gambar. Bayangin Toko Buku memesan ilustrasi promo ke ilustrator lepas. Kamu kirim brief: apa yang digambar, gayanya, ukurannya. Ilustrator mengirim file, kamu bayar per gambar, dan file itu kamu simpan di arsip toko sendiri, bukan di folder pinjaman si ilustrator yang besok bisa hilang. API gambar bekerja persis begitu.
🧪 Tebakan cepat: server Toko Buku memesan banner promo ke dua provider. Yang satu mengirim gambar sebagai teks base64, yang lain mengirim URL. Kalau URL itu langsung dipasang di
<img>halaman promo, apa yang dilihat pelanggan besok pagi? Tebak dulu, jawabannya ada di bagian "Simpan hasilnya, jangan pasang URL sementara".
Satu request ke Image API OpenAI
Ronggeng Dukuh Paruk baru datang, dan Bu Admin butuh banner promo 1536 × 1024 piksel. Server Toko Buku memanggil OpenAI:
import OpenAI from "openai";
const client = new OpenAI();
const result = await client.images.generate({
model: "gpt-image-2.5-flare", // cepat, untuk gambar sehari-hari
prompt: PROMPT_PROMO, // dibahas di bagian berikutnya
size: "1536x1024", // landscape
quality: "medium", // low, medium, high, xhigh, max, auto
output_format: "webp",
moderation: "auto", // filter bawaan, nilai default
});
const base64 = result.data[0].b64_json; // gambarnya, sebagai teks base64
const bytes = Buffer.from(base64, "base64"); // jadi file biner lagi
- Endpoint-nya
POST https://api.openai.com/v1/images/generations. Per Oktober 2026, panduan "Image generation" OpenAI menyarankangpt-image-2.5-flare(cepat, gambar sehari-hari) ataugpt-image-2.5-sunburst(paling presisi untuk mengedit gambar). - Model GPT Image selalu mengembalikan base64 di
b64_json, gak pernah URL. Base64 adalah cara menulis byte sebagai huruf, jadi ukurannya sekitar 4/3 kali file aslinya. sizestandar:1024x1024,1536x1024,1024x1536. Ukuran lain boleh selama sisi-sisinya kelipatan 16, rasionya antara 1:3 dan 3:1, dan sisi terpanjang paling besar 3840 piksel.- Satu gambar bisa butuh waktu lama: panduannya menulis prompt yang rumit bisa sampai 2 menit. Jalankan di background job, jangan di request yang ditunggu browser.
Nama yang dulu paling populer, DALL-E (DALL·E 2 dan DALL·E 3), adalah model gambar OpenAI generasi sebelumnya; menurut halaman "Deprecations", keduanya dihapus dari API tanggal 12 Mei 2026 dan diganti GPT Image. Nama populer lain, Stable Diffusion dari Stability AI, bobotnya terbuka dan juga bisa dipanggil lewat API. Provider kedua di pelajaran ini Black Forest Labs (model FLUX).
Prompt untuk gambar
Yang paling menentukan hasilnya adalah detail dan kejelasan prompt, bukan koneksi atau layar pelanggan. Model cuma tahu yang kamu tulis. Bandingkan:
| Prompt | Yang ditebak model sendiri |
|---|---|
| "penari ronggeng" | tempat, gaya, cahaya, sudut, ruang kosong, ada teks atau gak |
| lima bagian lengkap (di bawah) | hampir gak ada |
Prompt lengkapnya disusun dari lima bagian, dan di Lab tiap bagian bisa dinyalakan satu per satu:
Seorang penari ronggeng berselendang merah menari di tanah lapang (subjek),
di dusun kecil berpagar bambu di Jawa Tengah (tempat),
ilustrasi cat air dengan warna hangat (gaya),
cahaya senja keemasan dari samping (cahaya),
penari di sepertiga kiri, sisi kanan kosong untuk judul (komposisi),
tanpa teks, huruf, atau logo apa pun (larangan).
- Komposisi menyisakan ruang. Judul buku ditaruh di sisi kanan dengan HTML dan CSS, bukan oleh model: panduan OpenAI sendiri menulis model masih bisa kesulitan menaruh teks dengan tepat dan jelas.
- Larangan ("tanpa teks") mencegah huruf acak yang terlihat seperti tulisan.
- Jangan minta gambar yang meniru sampul asli sebuah buku, wajah orang nyata, atau logo merek. Itu masalah hak cipta dan bisa menyesatkan pelanggan.
Ukuran, kualitas, dan harga
Harga gambar dihitung dari ukuran dan kualitasnya. Dicek 11 Oktober 2026:
| Provider | Model | Harga |
|---|---|---|
| OpenAI | gpt-image-2.5-flare / -sunburst |
$30 per 1 juta token gambar output (harga per gambar belum ditulis OpenAI) |
| OpenAI | gpt-image-2 (tarif token sama, harga per gambar ditulis) |
1536 × 1024: low $0,005, medium $0,041, high $0,165. 1024 × 1024: low $0,006, medium $0,053, high $0,211 |
| Black Forest Labs | FLUX 3 Image | per gambar: 768sq $0,041, 1k $0,048, 2k $0,100, 4k $0,607 |
Sumbernya halaman "Pricing" dan "Image generation" OpenAI, dan halaman "Pricing" Black Forest Labs. Pakai patokan gpt-image-2 untuk menghitung: 4 draf low (4 × $0,005 = $0,02) lalu 1 versi final high ($0,165) totalnya $0,185. Langsung 5 kali high jadi $0,825, lebih dari 4 kali lipat. Kualitas low cukup untuk memilih ide; bayar mahal cuma untuk yang dipakai.
Simpan hasilnya, jangan pasang URL sementara
Black Forest Labs bekerja asinkron: request pertama cuma mengembalikan id dan polling_url, lalu server bertanya berulang sampai status jadi Ready, dan gambarnya ada di URL result.sample:
const kirim = await fetch("https://api.bfl.ai/v1/flux-3-image", {
method: "POST",
headers: { "x-key": process.env.BFL_API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ prompt: PROMPT_PROMO, aspect_ratio: "3:2", resolution: "1k" }),
});
const { polling_url } = await kirim.json();
let hasil;
do {
await new Promise((r) => setTimeout(r, 1500)); // tunggu 1,5 detik
hasil = await (await fetch(polling_url, { headers: { "x-key": process.env.BFL_API_KEY } })).json();
} while (["Pending", "Reasoning", "Generating"].includes(hasil.status));
if (hasil.status !== "Ready") throw new Error(hasil.status); // misalnya "Content Moderated"
const gambar = Buffer.from(await (await fetch(hasil.result.sample)).arrayBuffer()); // unduh SEKARANG
await storage.put("promo/buku-4/2026-10-11.webp", gambar); // R2, S3, atau disk server
Dokumentasi Black Forest Labs menulis URL di result.sample kedaluwarsa setelah 1 jam. Kalau URL itu dipasang langsung di <img>, besok pagi pelanggan melihat gambar rusak. Itu jawaban tebakannya. Dari OpenAI malah gak ada URL sama sekali: kalau base64-nya gak kamu simpan, gambarnya hilang begitu request selesai.
Jadi selalu: unduh atau decode, simpan di storage milikmu, lalu catat di database (id buku, path file, prompt, model, waktu, alt text). Halaman promo memakai URL storage-mu sendiri. Gambar juga dibuat sekali, bukan setiap kali halaman dibuka: 1.000 kunjungan × $0,041 = $41, sedangkan sekali buat cuma $0,041.
Moderasi dan kebijakan konten
Provider memeriksa prompt dan gambar hasilnya. Di OpenAI, parameter moderation bernilai auto (default, filter standar) atau low (lebih longgar). Request yang diblokir gagal dengan error.code "moderation_blocked", dan moderation_details.moderation_stage bilang dari mana: input (prompt-nya) atau output (gambarnya). Black Forest Labs punya safety_tolerance 0 sampai 4 (0 paling ketat, default 2) dan status Request Moderated atau Content Moderated. Request yang diblokir jangan diulang tanpa mengubah prompt.
Filter provider bukan satu-satunya penjaga. Tulis aturan toko sendiri (gak ada wajah orang nyata, sampul asli, atau logo merek), dan biarkan Bu Admin melihat gambarnya dulu sebelum tampil ke pelanggan.
Alt text untuk gambar buatan AI
Gambar di halaman butuh alt text: kalimat yang dibacakan screen reader dan muncul kalau gambar gagal dimuat. Prompt bukan alt text, karena model bisa menggambar sesuatu yang berbeda dari yang diminta. Tulis dari gambar yang benar-benar jadi, setelah dilihat:
<img src="https://cdn.tokobuku.test/promo/buku-4/2026-10-11.webp"
alt="Ilustrasi cat air: penari ronggeng berselendang merah menari di dusun saat senja"
width="1536" height="1024">
Judul buku ada di HTML di sebelahnya, jadi gak perlu diulang di alt. Gambar yang murni hiasan memakai alt="".
⚠️ Jebakan yang sering ketemu
- Memasang URL dari provider.
result.samplekedaluwarsa setelah 1 jam, dan OpenAI cuma mengirim base64. Unduh, simpan di storage sendiri. - Minta model menulis judul di gambar. Hurufnya bisa salah atau acak. Minta ruang kosong di prompt, taruh judulnya dengan HTML.
- Membuat ulang gambar di setiap kunjungan. Buat sekali, simpan, lalu pakai berkali-kali.
- Tampil tanpa dilihat manusia. Filter provider gak tahu aturan tokomu. Bu Admin memeriksa gambar dan menulis alt text sebelum dipublikasikan.
TL;DR: Image generation API menerima prompt dan mengembalikan gambar. OpenAI (Oktober 2026): POST /v1/images/generations dengan gpt-image-2.5-flare atau -sunburst, size (misalnya 1536x1024), quality (low sampai max), hasilnya selalu base64 di b64_json. DALL-E dihapus dari API 12 Mei 2026; Stable Diffusion dan FLUX (Black Forest Labs) adalah nama populer lain. Kualitas hasil paling ditentukan detail dan kejelasan prompt: subjek, tempat, gaya, cahaya, komposisi, larangan; judul ditaruh lewat HTML. Harga per gambar: patokan gpt-image-2 1536 × 1024 medium $0,041, FLUX 3 Image 1k $0,048; buat draf low dulu. URL result.sample Black Forest Labs mati setelah 1 jam, jadi selalu unduh dan simpan di storage sendiri, sekali saja. Hormati moderasi (moderation_blocked, Content Moderated), periksa gambar sebelum tampil, dan tulis alt text dari gambar yang jadi, bukan dari prompt.