Lewati ke konten
kenari.

Pembuatan gambar

kenari menyediakan endpoint pembuatan gambar yang kompatibel dengan OpenAI Images. Endpoint ini hanya melayani model yang ditandai sebagai model gambar di katalog. Memanggilnya dengan model teks akan mengembalikan status 400.

POST /v1/images/generations

Kirim prompt dan model, gateway mengembalikan gambar sebagai URL atau data base64. Biaya dipotong dari saldo Rupiah, per gambar.

FieldTipeWajibKeterangan
modelstringyaId model gambar dari katalog, mis. gpt-image-2.
promptstringyaDeskripsi gambar yang diminta.
nintegertidakJumlah gambar. Default 1.
sizestringtidakUkuran gambar, mis. "1024x1024". Bersifat petunjuk, bukan jaminan: lihat catatan di bawah.
backgroundstringtidak"transparent", "opaque", atau "auto". "transparent" menghasilkan PNG dengan latar transparan (kanal alpha).
response_formatstringtidak"url" atau "b64_json".

size diperlakukan berbeda oleh tiap model. Sebagian model memakainya apa adanya, sebagian mengabaikannya, dan sebagian lagi hanya mengenal rasio aspek sehingga ukuran yang dikirim dipetakan ke rasio terdekat yang didukung. Contohnya "1792x1024" pada model berbasis rasio menghasilkan gambar 16:9 dengan jumlah piksel yang ditentukan model, bukan persis 1792x1024. Bentuk gambar selalu sedekat mungkin dengan yang diminta, jumlah pikselnya bisa berbeda. Kalau ukuran piksel yang tepat itu penting, periksa dimensi gambar yang dikembalikan.

Penagihan dihitung per gambar: n dikalikan harga per gambar model, lalu dipotong dari saldo Rupiah. Meminta empat gambar membebani empat kali harga satu gambar. Lihat Penagihan untuk detail saldo dan pemotongan.

Response mengikuti bentuk OpenAI Images: objek created dan array data. Setiap elemen data berisi url (saat response_format bernilai "url") atau b64_json (saat "b64_json").

{
"created": 1718700000,
"data": [
{ "url": "https://..." }
]
}

Pembuatan gambar bisa butuh beberapa menit. Selama pekerjaan berjalan, gateway menjaga koneksi tetap terbuka dan mengirim heartbeat tiap 20 detik supaya proxy di jalur tidak memutus koneksi yang dianggap idle.

Terminal window
curl https://kenari.id/v1/images/generations \
-H "Authorization: Bearer kn-..." \
-H "Content-Type: application/json" \
-d '{"model":"gpt-image-2","prompt":"seekor panda merah sedang menulis kode","n":1,"size":"1024x1024"}'
from openai import OpenAI
client = OpenAI(
base_url="https://kenari.id/v1",
api_key="kn-...",
)
result = client.images.generate(
model="gpt-image-2",
prompt="seekor panda merah sedang menulis kode",
n=1,
size="1024x1024",
)
print(result.data[0].url)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://kenari.id/v1",
apiKey: "kn-...",
});
const result = await client.images.generate({
model: "gpt-image-2",
prompt: "seekor panda merah sedang menulis kode",
n: 1,
size: "1024x1024",
});
console.log(result.data[0].url);

POST /v1/images/edits

Endpoint ini mengedit gambar yang sudah ada: kirim satu atau lebih gambar sumber, deskripsi perubahan yang diminta, dan model gambar dari katalog. Ulangi field image (atau image[]) untuk tiap file, paling banyak 16. File ke-17 ditolak dengan 400. Request-nya multipart/form-data, bukan JSON, karena gambar dikirim sebagai file. Tiap file paling besar 25 MiB, seluruh body paling besar 32 MiB. Kalau model tidak bisa memakai sebanyak itu, request gagal dengan 503, bukan diam-diam membuang file yang berlebih.

FieldTipeWajibKeterangan
imagefileyaSatu atau lebih gambar sumber (PNG, JPEG, atau WebP). Ulangi field-nya, paling banyak 16 file.
promptstringyaDeskripsi perubahan yang diminta.
modelstringyaId model gambar dari katalog, mis. gpt-image-2.
maskfiletidakSatu file PNG mask. Area transparan menandai bagian yang boleh diedit. Tanpa mask, seluruh gambar jadi kandidat edit.
nintegertidakJumlah gambar hasil. Default 1. Tidak mengikuti jumlah file sumber.
sizestringtidakUkuran gambar, mis. "1024x1024". Bersifat petunjuk, bukan jaminan: lihat catatan di bawah.
backgroundstringtidak"opaque" atau "auto". "transparent" belum didukung untuk edit dan ditolak dengan 400. Untuk latar transparan, pakai pembuatan gambar.
response_formatstringtidak"url" atau "b64_json".

Penagihan dan bentuk response sama dengan pembuatan gambar di atas: n dikalikan harga per gambar model, bukan jumlah file sumber, dipotong dari saldo Rupiah, response {created, data:[...]}.

Terminal window
curl https://kenari.id/v1/images/edits \
-H "Authorization: Bearer kn-..." \
-F "image=@sumber.png" \
-F "image=@referensi.png" \
-F "model=gpt-image-2" \
-F "prompt=ganti langit jadi senja, pakai gaya dari gambar kedua" \
-F "n=1"
from openai import OpenAI
client = OpenAI(
base_url="https://kenari.id/v1",
api_key="kn-...",
)
result = client.images.edit(
model="gpt-image-2",
image=[open("sumber.png", "rb"), open("referensi.png", "rb")],
prompt="ganti langit jadi senja, pakai gaya dari gambar kedua",
n=1,
)
print(result.data[0].url)