GPT-6 Sol & Claude Opus 5.5 kini tersediaGPT-6 Sol: setengah harga 5.6 Sol

Seedream 5.0 Pro API: Membuat Gambar dengan Python

Satu POST dengan model Dola-Seedream-5.0-pro langsung membuat tugas gambar. Berikut kode permintaannya, perilaku ukuran dan label yang kami lihat, serta dua gambar yang kami buat pada 29 Oktober 2026.

Kiki, OmniaKey COO7 menit baca
Di halaman ini

Kirim satu POST ke https://api.omniakey.com/v1/media/tasks dengan model diisi Dola-Seedream-5.0-pro dan operation diisi generate, lalu polling id tugas sampai statusnya succeeded dan unduh assets[0].url. Secara bawaan gambar membawa label "AI generated" di sudutnya. Pada 29 Oktober 2026 kami menjalankan permintaan itu dan satu edit berukuran 1024x1024, dan kedua berkas kembali sebagai PNG 1024×1024.

Berikut ini id dan dua operasinya, kode permintaan yang kami jalankan tanpa perubahan, daftar ukuran yang kami minta di samping ukuran piksel yang kami baca dari tiap berkas, label, pengaturan yang mematikannya (yang ini belum dijalankan), dan dua error yang menghentikan panggilan pembuatan. Kedua gambar adalah hasil kami hari itu.

Id model dan operasi yang dipakai

Pakai Dola-Seedream-5.0-pro, id pada halaman model Seedream 5.0 Pro (dicek 29 Oktober 2026). Halaman itu mencantumkan dua operasi, teks ke gambar dan edit gambar. Di sana juga tertulis bahwa membuat dan mengedit memakai tarif yang sama, dan ukuran yang Anda pilih maupun gambar referensi yang dilampirkan tidak menambah tarif. Tarif terbaru ada di halaman harga.

Sebelum prompt, bentuk permintaan ditentukan oleh bidang berikut:

  • model: Dola-Seedream-5.0-pro
  • operation: generate atau edit
  • parameters.size: 1K, 1.5K, 2K, atau widthxheight dengan x
  • output_format: png atau jpeg, dan jpeg adalah bawaannya

Bidang ukuran dan format berada di dalam parameters. Keluaran berhenti di 2K: halaman model (dicek 29 Oktober 2026) tidak mencantumkan ukuran 4K. Seedream memakai huruf x kecil di antara kedua sisi, sedangkan Qwen dan Wan memakai tanda bintang, jadi pisahkan kedua bentuk itu di klien yang memanggil keduanya. Percobaan kami memakai bentuk widthxheight dengan 1024x1024 dan PNG, sedangkan tiga tingkat ukuran tidak ikut dijalankan.

ByteDance menjual model yang sama di BytePlus ModelArk dengan id lain, dola-seedream-5-0-pro-260628. Id itu milik BytePlus, jadi permintaan ke OmniaKey memakai id di atas.

Kode permintaannya

Skrip di bawah adalah yang kami jalankan pada 29 Oktober 2026, tanpa perubahan: dua helper, satu panggilan membuat gambar, satu panggilan edit, hanya pustaka standar Python. Kunci dibaca dari OMNIAKEY_API_KEY dan setiap PNG ditulis ke folder tempat Anda menjalankannya. Dokumentasi API gambar menjelaskan tiga langkah yang sama.

python
import base64
import json
import os
import time
import urllib.error
import urllib.request
import uuid

API = "https://api.omniakey.com/v1/media/tasks"
KEY = os.environ["OMNIAKEY_API_KEY"]
MODEL = "Dola-Seedream-5.0-pro"

def request(method, url, body=None, extra_headers=None):
    headers = {"Authorization": f"Bearer {KEY}", "User-Agent": "omniakey-example/1"}
    data = None
    if body is not None:
        headers["Content-Type"] = "application/json"
        data = json.dumps(body).encode()
    headers.update(extra_headers or {})
    req = urllib.request.Request(url, data=data, headers=headers, method=method)
    with urllib.request.urlopen(req, timeout=120) as resp:
        return json.load(resp)

def poll(url, attempts=5):
    for attempt in range(attempts):
        try:
            return request("GET", url)
        except urllib.error.HTTPError as err:
            if err.code < 500 or attempt == attempts - 1:
                raise
        except urllib.error.URLError:
            if attempt == attempts - 1:
                raise
        time.sleep(5 * (attempt + 1))

def run_task(body, out_path):
    task = request("POST", API, body, {"Idempotency-Key": str(uuid.uuid4())})["id"]
    print("task", task, flush=True)
    for _ in range(150):
        time.sleep(4)
        state = poll(f"{API}/{task}")
        if state["status"] not in ("queued", "processing"):
            break
    if state["status"] != "succeeded":
        raise RuntimeError(state.get("error") or state["status"])
    asset_url = state["assets"][0]["url"]  # signed link: short-lived, so download now
    req = urllib.request.Request(asset_url, headers={"User-Agent": "omniakey-example/1"})
    with urllib.request.urlopen(req, timeout=120) as resp, open(out_path, "wb") as f:
        f.write(resp.read())
    return task

def generate_image(prompt, out_path, size="1024x1024"):
    body = {
        "model": MODEL,
        "type": "image",
        "operation": "generate",
        "input": {"prompt": prompt},
        "parameters": {"size": size, "output_format": "png"},
    }
    return run_task(body, out_path)

def edit_image(source_path, prompt, out_path, size="1024x1024"):
    with open(source_path, "rb") as f:
        image = base64.b64encode(f.read()).decode()
    body = {
        "model": MODEL,
        "type": "image",
        "operation": "edit",
        "input": {"prompt": prompt, "image": {"data": image, "mime_type": "image/jpeg"}},
        "parameters": {"size": size, "output_format": "png"},
    }
    return run_task(body, out_path)

if __name__ == "__main__":
    task = generate_image(
        "A glass bottle of cold-pressed orange juice on a pale stone counter, morning light from the left, "
        "a single orange slice beside it, shallow depth of field, no text, no logos.",
        "juice-bottle.png",
    )
    print("generate task", task)
    task = edit_image(
        "cafe-base.jpg",
        "Change the red bicycle to matte black. Keep everything else exactly the same: "
        "the table, the cup, the window frame and the daylight. Photorealistic, no text, no logos.",
        "cafe-edited.png",
    )
    print("edit task", task)

Tiga langkahnya ada di dalam run_task: buat tugas dengan kunci idempotensi baru, polling URL tugas sampai status keluar dari queued dan processing, lalu unduh URL aset pertama. Kedua fungsi memakai jalur yang sama, jadi perilaku polling dan unduhan tetap satu. Panggilan pembuatan menjawab HTTP 202 dengan id yang diawali task_, dan status dimulai sebagai queued (dokumentasi, dicek 29 Oktober 2026). Tugas yang berakhir failed melempar error dari respons, jadi penyebabnya langsung tampil di terminal Anda.

Ukuran dan format yang kami jalankan, dan hasilnya

Kedua percobaan meminta string ukuran dan format yang sama, dan kedua berkas kembali sebagai PNG 1024×1024.

  • Membuat — Ukuran yang diminta: 1024x1024; Piksel di berkas: 1024×1024; Format: PNG; Tanggal: 2026-10-29
  • Edit — Ukuran yang diminta: 1024x1024; Piksel di berkas: 1024×1024; Format: PNG; Tanggal: 2026-10-29

Baca ukuran piksel dari berkas yang Anda unduh. String ukuran adalah yang Anda minta; berkasnya adalah yang Anda terima. Saat menata halaman, pakai angka dari berkas itu, bukan string yang Anda kirim. Kami membuka tiap PNG, membaca lebar dan tingginya, lalu melihat gambarnya di samping prompt yang membuatnya.

Edit adalah percobaan yang lebih menarik. Kami mengirim JPEG 1024×683 berisi jendela kafe dan satu instruksi, lalu kembalinya gambar persegi. Sepedanya sekarang gelap, meja, cangkir, dan tanaman masih ada di gambar, dan karena keluarannya persegi, jendela serta tepi meja terbingkai berbeda dari sumbernya.

prompt
Change the red bicycle to matte black. Keep everything else exactly the same: the table, the cup, the window frame and the daylight. Photorealistic, no text, no logos.
Kiri: jendela kafe dengan sepeda merah di luar. Kanan: jendela yang sama setelah edit, sepedanya kini gelap, dalam bingkai persegi.
Kiri: foto sumber yang kami kirim, 1024×683. Kanan: keluaran satu edit pada 29 Oktober 2026, ukuran 1024x1024. Sepedanya kini gelap. Keluarannya persegi, jadi jendela dan tepi meja terbingkai berbeda dari sumbernya.

Label dan cara mematikannya

Setiap keluaran membawa label "AI generated" di sudut, kecuali Anda mengatur watermark ke false di parameters, menurut halaman model (dicek 29 Oktober 2026). Halaman itu menempatkan label di sudut kanan bawah, dan di situlah label pada keluaran bawaan di bawah: tipis dan kecil. Biarkan watermark di luar permintaan dan Anda mendapat gambar berlabel.

prompt
A glass bottle of cold-pressed orange juice on a pale stone counter, morning light from the left, a single orange slice beside it, shallow depth of field, no text, no logos.

Berikut keluarannya, dibuat dengan pengaturan bawaan:

Sebotol jus jeruk dengan sepotong jeruk di meja batu berwarna terang, dengan label AI generated tipis di sudutnya.
Dibuat dengan Seedream 5.0 Pro lewat API OmniaKey pada 29 Oktober 2026, ukuran 1024x1024, pengaturan bawaan. Label 'AI generated' yang tipis berada di sudut kanan bawah.

Pengaturan watermark false belum dijalankan: batas belanja per percobaan milik alat blog menghentikan panggilan itu sebelum terkirim.

Error dan batasannya

Dua header menentukan apakah panggilan pembuatan lolos: bearer token dan Idempotency-Key.

Yang Anda kirimYang kembali
Panggilan pembuatan tanpa kunci idempotensi400 missing_idempotency_key
Kunci sama dan body sama, diulang200 dengan tugas yang sudah ada, tanpa biaya baru
Kunci sama, body berubah409 idempotency_key_reused

Kunci yang sama dengan body yang sama adalah percobaan ulang yang Anda inginkan: tugas yang sudah ada kembali dan tidak ada biaya baru. Kunci yang sama dengan prompt atau ukuran yang berubah menghasilkan 409, jadi buat kunci baru untuk setiap permintaan baru. Panjang kunci sampai 255 karakter (dokumentasi, dicek 29 Oktober 2026). Kalau ragu, pakai satu kunci untuk satu permintaan dan simpan nilainya selama percobaan ulang.

Jaga body permintaan di bawah 1 MiB, termasuk gambar Base64, dan perkecil foto sumber yang besar sebelum dikirim. Saat tugas berhasil, URL unduhan di respons adalah tautan bertanda tangan yang berlaku sekitar satu jam, menurut dokumentasi, jadi ambil berkasnya langsung atau polling lagi untuk tautan baru.

Satu header membuat kami terkejut pada 29 Oktober 2026. POST yang dikirim dengan User-Agent bawaan urllib Python kembali HTTP 403 dengan body error code: 1010 dari Cloudflare. Header User-Agent kami sendiri sampai ke API, dan tidak ada biaya yang keluar.

Kirim header User-Agent Anda sendiri, misalnya omniakey-example/1. Bawaan Python kena 403 di atas pada 29 Oktober 2026.

Seedream atau GPT Image 2.5 untuk kerja API?

Pekerjaannya yang menentukan. Pada edit kami, Seedream 5.0 Pro mengubah objek yang kami sebut, yaitu sepeda, dan mempertahankan sebagian besar isi gambar, meski bingkainya berubah; dua percobaan kami adalah jendela kafe dan sebotol jus. Panggilannya satu body dengan operation diisi generate atau edit, dan sumbernya bisa URL publik atau Base64 inline (dokumentasi, dicek 29 Oktober 2026).

Untuk melihat hasil prompt yang sama di samping GPT Image 2, perbandingan Seedream 5.0 Pro vs GPT Image 2 menampilkan kedua keluaran dari satu prompt. Untuk bentuk buat-dan-edit yang sama pada model lain, tutorial API GPT Image 2.5 menelusuri permintaannya dan ukurannya. Jalankan prompt tersulit Anda pada kandidat sebelum memindahkan pipeline, lalu periksa tarifnya.

FAQ

Id model apa yang dikirim ke API?

Dola-Seedream-5.0-pro, id pada contoh permintaan di halaman model (dicek 29 Oktober 2026). dola-seedream-5-0-pro-260628 milik ByteDance sendiri termasuk BytePlus ModelArk, sedangkan OmniaKey memakai id di atas.

Kenapa gambar saya punya label "AI generated"?

Setiap keluaran Seedream 5.0 Pro membawa label di sudut kanan bawah kecuali watermark diatur ke false, menurut halaman model (dicek 29 Oktober 2026). Percobaan kami dengan pengaturan bawaan pada 29 Oktober 2026 membawa label itu.

Ukuran apa saja yang diterima API?

Tingkat 1K, 1.5K, dan 2K, atau bentuk widthxheight dengan huruf x kecil di antara kedua sisi (halaman model, dicek 29 Oktober 2026). Keluaran berhenti di 2K, dan kedua percobaan kami meminta 1024x1024.

Bisakah saya mendapat PNG, bukan JPEG?

Bisa. output_format menerima png atau jpeg, dan JPEG adalah bawaannya (dokumentasi, dicek 29 Oktober 2026). Kami memakai PNG di kedua percobaan dan mendapat PNG kembali.

Bisakah gambar yang sudah ada diedit dengan Seedream?

Bisa: kirim operation diisi edit bersama prompt dan gambar sumber, baik sebagai Base64 inline dengan mime type maupun sebagai URL publik. Edit jendela kafe ada di bagian ukuran di atas.

Model di artikel ini

Seedream 5.0 ProAPI gambarPythonteks ke gambarAPI

Artikel terkait

Artikel terbaru