GPT-6 Sol・Claude Opus 5.5 提供開始GPT-6 Sol の料金は 5.6 Sol の半額

Seedream 5.0 Pro API:Python で画像を生成する

model に Dola-Seedream-5.0-pro を指定した POST 1 回で画像タスクが作成されます。実行したリクエストコード、サイズとラベルの実際の挙動、2026 年 10 月 29 日に生成した 2 枚をまとめます。

Kiki, OmniaKey COO読了目安 7分
このページの内容

https://api.omniakey.com/v1/media/tasks に POST を 1 回送り、model に Dola-Seedream-5.0-pro、operation に generate を指定すると画像タスクが作成されます。返ってきたタスク ID を、status が succeeded になるまでポーリングして assets[0].url をダウンロードします。既定では画像の隅に「AI generated」ラベルが入ります。2026 年 10 月 29 日にこのリクエストと 1024x1024 の編集を 1 回ずつ実行し、どちらのファイルも 1024×1024 の PNG で返ってきました。

続いて、モデル ID と 2 つの操作、そのまま実行したリクエストコード、指定したサイズと各ファイルから読み取ったピクセルサイズの対応リスト、ラベルとそれを消す設定(未実行)、create 呼び出しが止まる 2 つのエラーを順に示します。画像は 2 枚ともその日に生成したものです。

使うモデル ID と操作

Dola-Seedream-5.0-pro を使います。Seedream 5.0 Pro のモデルページにある ID です(2026 年 10 月 29 日確認)。ページにはテキストから画像生成と画像編集の 2 操作が載っています。生成と編集は同じ料金で、選んだサイズも添付した参照画像も料金に加算されないと書かれています。現在の料金は 料金ページ にあります。

リクエストの形を決めるフィールドは、プロンプトの前に次のとおりです。

  • model: Dola-Seedream-5.0-pro
  • operation: generate または edit
  • parameters.size: 1K、1.5K、2K、または辺の間に小文字の x を挟んだ widthxheight
  • output_format: png または jpeg(既定は jpeg)

サイズと形式のフィールドは parameters の中に入れます。出力は 2K までで、モデルページ(2026 年 10 月 29 日確認)に 4K のサイズはありません。Seedream は辺の間に小文字の x を書き、Qwen や Wan はアスタリスクを使うため、両方を呼ぶクライアントでは 2 つの形式を混同しないでください。実行したのはどちらも widthxheight 形式の 1024x1024 と PNG で、1K・1.5K・2K の 3 段階は使っていません。

ByteDance は同じモデルを BytePlus ModelArk で別の ID dola-seedream-5-0-pro-260628 として販売しています。これは BytePlus 側の ID なので、OmniaKey へのリクエストでは上の ID を使ってください。

リクエストコード

次のスクリプトは 2026 年 10 月 29 日にそのまま実行したものです。ヘルパー関数が 2 つ、生成呼び出しが 1 回、編集呼び出しが 1 回で、Python の標準ライブラリしか使いません。キーは OMNIAKEY_API_KEY から読み、PNG はスクリプトを実行したフォルダに書き出します。画像 API のドキュメント にも同じ 3 ステップが書かれています。

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)

3 つのステップはすべて run_task の中にあります。新しい冪等キーでタスクを作成し、status が queued と processing から外れるまでタスク URL をポーリングし、最初のアセット URL をダウンロードします。create 呼び出しは HTTP 202 と task_ で始まる ID を返し、status は queued から始まります(ドキュメント、2026 年 10 月 29 日確認)。failed になったタスクではレスポンスのエラーをそのまま送出するので、原因がターミナルに表示されます。

実行したサイズと形式、返ってきたファイル

2 回の実行はどちらも同じサイズ文字列と同じ形式を指定し、返ってきたファイルも 2 つとも 1024×1024 の PNG でした。

  • 生成 — 指定したサイズ: 1024x1024; ファイルのピクセル: 1024×1024; 形式: PNG; 日付: 2026-10-29
  • 編集 — 指定したサイズ: 1024x1024; ファイルのピクセル: 1024×1024; 形式: PNG; 日付: 2026-10-29

ピクセルサイズはダウンロードしたファイルから読み取ってください。サイズ文字列は指定した値で、ファイルのほうが実際に得られた結果です。各 PNG を開いて幅と高さを測り、生成に使ったプロンプトと見比べました。

より興味深いのは編集のほうです。窓辺を写した 1024×683 の JPEG に指示を 1 つ添えて送ったところ、正方形の画像が返ってきました。自転車は濃い色になり、テーブル、カップ、植物は残っています。出力が正方形なので、窓とテーブルの縁の収まりは元画像と変わります。

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.
左:外に赤い自転車が見えるカフェの窓。右:編集後の同じ窓。自転車は濃い色になり、正方形の枠に収まっている。
左:送信した元写真、1024×683。右:2026 年 10 月 29 日の編集 1 回の出力、サイズは 1024x1024。自転車は濃い色になった。出力は正方形なので、窓とテーブルの縁の収まりは元写真と変わる。

「AI generated」ラベルと、それを消す方法

モデルページ(2026 年 10 月 29 日確認)によると、parameters で watermark を false にしない限り、すべての出力の隅に「AI generated」ラベルが入ります。ページでは右下隅とされており、下の既定出力でもそこに入っています。薄く、小さく表示されます。watermark をリクエストに含めなければラベル付きになります。

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.

既定設定で生成した出力はこちらです。

淡い石のカウンターに置かれたオレンジジュースの瓶とオレンジのスライス。隅に薄い AI generated ラベルが入っている。
2026 年 10 月 29 日に OmniaKey API 経由で Seedream 5.0 Pro により生成。サイズは 1024x1024、既定設定。薄い「AI generated」ラベルが右下隅に入っている。

watermark を false にする設定は実行していません。ブログツールの 1 回あたりの費用上限が、送信前にその呼び出しを止めました。

エラーと制限

create 呼び出しが通るかどうかは 2 つのヘッダーで決まります。Bearer トークンと Idempotency-Key です。

送る内容返ってくるもの
冪等キーなしで create 呼び出し400 missing_idempotency_key
同じキーと同じ body をもう一度200 と既存のタスク。新たな課金なし
同じキーで body を変更409 idempotency_key_reused

同じキーと同じ body が安全な再送です。既存のタスクが返り、新たに課金されることはありません。同じキーでプロンプトやサイズを変えると 409 が返るので、新しいリクエストごとに新しいキーを作ってください。キーは最大 255 文字です(ドキュメント、2026 年 10 月 29 日確認)。

リクエスト body は Base64 の画像を含めて 1 MiB 未満に抑え、大きな元写真は送る前に縮小してください。タスクが成功すると、レスポンスのダウンロード URL は約 1 時間有効な署名付きリンクになります(ドキュメントによる)。すぐにファイルを取得するか、もう一度ポーリングして新しいリンクを取得してください。

2026 年 10 月 29 日、1 つのヘッダーに驚かされました。Python の既定の urllib User-Agent を付けて POST すると、Cloudflare から HTTP 403 と error code: 1010 が返りました。独自の User-Agent ヘッダーなら API に届き、課金もされませんでした。

独自の User-Agent ヘッダーを付けてください(例:omniakey-example/1)。2026 年 10 月 29 日、Python の既定値では上記の 403 になりました。

API で使うなら Seedream と GPT Image 2.5 のどちらか

用途で決まります。今回の編集では、Seedream 5.0 Pro は指定した 1 つのオブジェクト(自転車)を変え、シーンの大部分を保ちましたが、枠は変わりました。商品写真はここでは試していません。呼び出しは operation に generate または edit を指定した 1 つの body で、元画像は公開 URL でもインライン Base64 でもかまいません(ドキュメント、2026 年 10 月 29 日確認)。

同じプロンプトでの結果を GPT Image 2 と並べて見たい場合は、Seedream 5.0 Pro と GPT Image 2 の比較 に両方の出力があります。別モデルで同じ生成・編集の形を試すなら、GPT Image 2.5 API のチュートリアル にリクエストとサイズがあります。パイプラインを移す前に、いちばん難しいプロンプトを候補で実行し、料金を確認してください。

FAQ

API に渡すモデル ID は何ですか?

Dola-Seedream-5.0-pro です。モデルページのサンプルリクエストにある ID です(2026 年 10 月 29 日確認)。ByteDance 自身の dola-seedream-5-0-pro-260628 は BytePlus ModelArk のもので、OmniaKey では上の ID を使います。

画像に「AI generated」ラベルが付くのはなぜですか?

モデルページ(2026 年 10 月 29 日確認)によると、watermark を false にしない限り、すべての Seedream 5.0 Pro の出力は右下隅にラベルが入ります。10 月 29 日の既定設定での実行でも入っていました。

API が受け付けるサイズはどれですか?

1K、1.5K、2K の 3 段階、または辺の間に小文字の x を挟んだ widthxheight 形式です(モデルページ、2026 年 10 月 29 日確認)。出力は 2K までで、実行した 2 回はいずれも 1024x1024 を指定しました。

JPEG ではなく PNG で取得できますか?

はい。output_format には png か jpeg を指定でき、既定は JPEG です(ドキュメント、2026 年 10 月 29 日確認)。実行した 2 回はどちらも PNG を指定し、PNG で返ってきました。

Seedream で既存の画像を編集できますか?

はい。operation に edit を指定し、プロンプトと元画像を渡します。元画像は mime タイプ付きのインライン Base64 でも公開 URL でもかまいません。上のサイズの節にあるカフェの窓の編集がその例です。

この記事で紹介しているモデル

Seedream 5.0 Pro画像生成APIPythonテキストから画像生成API

関連記事

最近の記事