Image Generation API — AI Web

Image Generation API Generate, edit, dan variasi gambar menggunakan AI. Use case: thumbnail generator, avatar builder, product mockup, illustration. DALL-E…

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

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).

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

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.

Yang akan kamu pelajari