画像1枚あたりの見出し価格(公称価格)は、最初の絞り込み条件としては不十分です。同じ名目レートの2つのモデルであっても、参照画像を受け付けるか、マスク編集をサポートしているか、出力サイズの選択方法、課金がリクエスト単位かトークン単位かといった点で異なる場合があります。まずは機能によって候補を絞り込み、その上で独自のプロンプトを用いて採用可能な出力あたりのコストを比較してください。
この記事は、画像生成APIの選定フレームワークです。対象は画像生成であり、動画は含みません。パイプラインで両方が必要な場合でも同様の非同期処理や課金の仕組みが適用されますが、動画は本記事の対象外です。
ステップ1:対応する操作を一致させる
最初の絞り込み基準は操作(オペレーション)です。テキストのみから生成するエンドポイントではマスク編集は行えませんし、インペインティング専用に構築されたモデルは汎用的なプロンプトからの画像生成には適していません。
TokenLabでは、通常、生成と編集で異なるエンドポイントが使用されます:
| 必要な操作 | エンドポイント | 備考 |
|---|---|---|
| Text-to-image | POST /v1/images/generations |
リクエストはプロンプトのみから開始 |
| Image-to-image / 参照画像による生成 | POST /v1/images/generations |
operation: "image-to-image" と参照URLを受け付けるモデル |
| マスク編集またはマルチパート編集 | POST /v1/images/edits |
編集フローがドキュメント化されているモデル |
| 既存画像のバリエーション生成 | POST /v1/images/variations |
すでに variations の形式を使用している連携向け |
| タスクステータス | GET /v1/tasks/{id} |
作成レスポンスが task_id、status: "pending"、または poll_url を返す場合 |
判断対照表については画像生成ガイドを、リクエストフィールドについては画像作成および画像編集のリファレンスを参照してください。
ルーティングルールにおいて、特に失敗の原因となりやすい点が1つあります。Nano Bananaの参照画像リクエスト(nano-banana-2、nano-banana-pro)は、/v1/images/edits ではなく、operation: "image-to-image" と image_urls を指定して /v1/images/generations に送信する必要があります。逆に、gpt-image-2 の編集は /v1/images/edits で行い、マルチパート形式の image アップロード、JSONの image_url / image_urls、および最大16枚のソース画像を含む images[] 参照を受け付けます。
現在のTokenLabカタログにおける有用な分類:
- 生成と編集の両方に対応:
flux-2-klein-4b,flux-2-klein-9b,flux-2-pro,flux-2-flex,flux-2-max,flux-kontext-pro,flux-kontext-max,gemini-3-pro-image,gemini-3.1-flash-image,nano-banana-2,nano-banana-2-lite,nano-banana-pro,gpt-image-2,gpt-image-2.5-flare,gpt-image-2.5-sunburst,grok-imagine-image,grok-imagine-image-quality,grok-imagine-image-2.0,qwen-image-2.0,qwen-image-2.0-pro,qwen-image-3.0,seedream-4.0,seedream-4.5,seedream-5.0,seedream-5.0-lite,seedream-5.0-pro,vidu-image-lite,vidu-image-pro - Text-to-imageのみ:
flux-1-dev,flux-pro-1.1,flux-pro-1.1-ultra,sd3.5-medium,sd3.5-large,sd3.5-large-turbo,sd3.5-flash,stable-image-core,stable-image-ultra,z-image,z-image-turbo,kling-image,kling-omni-image,hy-image-lite - 特化型編集ツール:
stability-inpaint,stability-control-sketch,stability-control-structure,stability-style-guide,stability-upscale-fast,stability-upscale-conservative,image-upscaler,image-background-remover,flux-pro-1.0-fill,qwen-image-edit
ファミリー単位ではなく、モデルごとに対応操作を確認してください。GET /v1/models?recommended_for=image は現在推奨されているセットを返し、モデル取得 リファレンスには、特定のIDが何を受け付けるかを示す supported_operations フィールドが記載されています。
ステップ2:モデルが参照画像をどのように受け付けるかを確認する
参照画像の扱いは、連携が破綻しやすいポイントです。フィールド名には互換性がありません:
image_url— 単一の参照画像。image_urls— JSON形式での1つ以上の参照画像。reference_image_urls— プライマリ入力と参照画像を分離するモデル向けの追加の参照画像。image— プライベートまたはヘッダーで保護されたソース画像用のマルチパートファイルアップロード。image_urlまたはfile_idを含むimages[]— 編集フローの形式。/v1/images/generationsでは受け付けられません。
APIリファレンスに記載されている、設計時に考慮すべき制約事項:
- リモート参照は、認証情報やフラグメントを含まない公開
http/httpsURLである必要があり、localhost、プライベートIP、または予約済みIPアドレスの範囲に解決されてはなりません。リダイレクトのたびに再検証されます。 - URL経由で取得される画像:画像1枚あたり50 MiB、リクエスト全体(マスクを含む)で合計200 MiBまで、取得タイムアウトは30秒、リダイレクトは最大3回まで。取得されるペイロードは実際のPNG、JPEG、またはWebPである必要があります。
- ソース画像の上限数は異なります。
gpt-image-2は最大16枚を受け付けます。ドキュメント化されている入力画像3枚の上限は、特にgrok-imagine-imageおよびgrok-imagine-image-qualityに適用され(3枚を超えると400 too_many_imagesで失敗します)、grok-imagine-image-2.0には記載されていません。 maskは、ソース画像と同じ寸法を持つ50 MiB未満のPNGである必要があります。
ソース画像がプライベートな場合は、有効期限付きの署名付きURLを渡すのではなく、マルチパートアップロードまたは /v1/files 参照を検討してください。処理が開始される前に期限切れになった署名付きURLは、生成失敗ではなく入力の拒否として扱われます。
ステップ3:モデル名だけでなく出力制御パラメータを比較する
同じ階層の2つのモデルであっても、公開されているサイズや品質の制御パラメータがまったく異なる場合があります。UIを構築する前に、セレクターの仕様を確認してください。
| 制御パラメータ | 確認事項 |
|---|---|
size |
OpenAIスタイルのファミリーは auto または WIDTHxHEIGHT を受け付けます。gpt-image-2 の場合、寸法は16の倍数、長辺は最大3840px、長辺/短辺の比率は最大3:1、総ピクセル数は655,360〜8,294,400の間である必要があります |
aspect_ratio |
Google画像ファミリーおよびGrok Imagineは 1:1、16:9、9:16、3:2、2:3 などの値を使用します |
resolution |
gemini-3.1-flash-image、gemini-3-pro-image、nano-banana-2、および nano-banana-pro は 1k、2k、4k をサポートしますが、nano-banana-2-lite は 1k のみをサポートします。Grok Imagineは 1k と 2k をサポートします |
quality |
GPT Imageモデルは auto、low、medium、high を使用します。他のモデルでは異なる値が使用される場合があります |
n |
1リクエストあたりの画像数(モデル依存) |
response_format |
url または b64_json。非同期タスクは要求されたフォーマットに関わらずURLを返します |
background、output_format、output_compression |
gpt-image-2 向けにドキュメント化されています。transparent はサポートされていません |
async |
gpt-image-2 および公式FLUX/BFL画像モデルでサポートされています |
ドキュメントに記載されていないフィールドを送信することは無害ではありません。たとえば、input_fidelity は現在 gpt-image-2 でサポートされているフィールドには含まれておらず、400 unsupported_parameter を返します。他のモデルでも、サポートされていないフィールドを指定すると同様に失敗します。全フィールドの一覧は 画像作成 リファレンスに記載されています。
ステップ4:何かを比較する前に課金単位を確認する
トークン単位のモデルと画像単位のモデルを、あたかも同じ単位であるかのように比較してしまうと、コスト比較を見誤ることになります。
gpt-image-2はトークン課金です。TokenLabは、テキスト入力、画像入力、報告されたキャッシュ入力、および画像出力トークンに関するメーカーの使用量内訳に従っており、固定の画像単位モデルとしては請求されません。- 他のほとんどの画像モデルは、モデルページに表示されているとおり、リクエスト単位、画像単位、またはその他の単位で価格設定されています。
実際上の影響として、gpt-image-2 では、出力トークン数が変化するため、同じプロンプトかつ同じ公称設定であっても、解像度、品質、プロンプト自体によってコストが異なる場合があります。ルーティングルールを確定する前に、実際に計測を行ってください。
テーブルに値をハードコーディングするのではなく、リクエスト実行時に現在の課金単位と価格を読み取ってください:
- 請求と価格設定 では、請求、見積もり、および非同期予約の仕組みについて説明しています。
- モデル取得 は、単一モデルの
tokenlab.pricingおよびtokenlab.pricing_unitを返します。 - モデル一覧 は、
tokenlab.pricing、tokenlab.capabilities、およびtokenlab.deliveryAvailabilityを含むカタログを返します。 - モデルページ では、閲覧用に同様の情報が表示されています。
TokenLabの価格欄にあるダッシュ(-)は、そのモデルで利用可能なTokenLab Verifiedの提供が現在存在しないことを意味しており、モデルが無料であることを意味するものではありません。Official供給があるモデルには、OfficialまたはAutoの配信オプションを通じて引き続きアクセスできます。
ステップ5:同期的フローかタスクベースのフローかを決定する
高解像度の画像リクエストには、1分近く、あるいはそれ以上の時間がかかることがあります。同期呼び出しを行う場合はHTTPクライアントのタイムアウトを少なくとも120秒に設定するか、タスクフローを使用してください。
gpt-image-2または公式FLUX/BFL画像モデルでasync: trueを送信すると、完成した画像ではなくtask_idとpoll_urlを取得できます。- モデルが常に同期的である、あるいは常に非同期的であるとハードコーディングしないでください。作成レスポンスを確認し、
status: "pending"、task_id、またはpoll_urlが含まれている場合は、返されたpoll_urlに従ってください。 - ステータスには
pending、processing、completed、failedがあります。ステータスの読み取り自体が成功した場合、タスクが失敗していてもHTTP 200が返されるため、HTTPコードではなくstatusフィールドを使用してください。 - 非同期の画像結果はURLとして返されます。生の
b64_jsonが必要な場合は、同期リクエストを使用してください。 - 数秒ごとにポーリングを行い、終端ステータスで停止してください。生成された画像のHTTP(S)結果URLは、メディアコピーとして30日間保持される場合があります。各アイテムのステータスと
expires_atについてはmedia_retention.itemsを確認してください。
詳細は、非同期ジョブとポーリングのガイド および 画像ステータス取得 リファレンスを参照してください。
リトライはレイテンシのリスクであるだけでなく、課金のリスクでもあります。タイムアウト後に作成リクエストを再試行すると、2つ目のタスクが生成され、2重に請求が発生する可能性があります。request_id、task_id、および任意の billing_transaction_id を保存し、再試行する前にタスクが作成されていないか確認してください。
ステップ6:独自のプロンプトセットで評価する
本記事にはベンダー中立的な品質ランキングは含まれておらず、マーケティングコピーをそのまま受け取るべきでもありません。実際のワークロードにおける測定によって選定を正当化してください:
- 本番環境での分布(実際に受け取る主題、スタイル、指示の形式)を反映した固定のプロンプトセットを用意します。一般的なデモ用プロンプトでは、モデルの違いを見極めることはできません。
- 候補となるモデル全体で同じ設定を用いて同じセットを実行し、リトライを含めたリクエストごとの生成時間を記録します。
- サンプルを目視で大雑把に確認するのではなく、自動化または人間のレビューパネルを用いて、固定のルーブリックに従って出力を評価・採点します。
- 生成された画像あたりのコストではなく、**採用された(合格基準を満たした)**画像あたりのコストを算出します。使い物になる出力1つを得るために2回の試行を要する安価なモデルは、決して安価ではありません。
- プロダクトがレイテンシに敏感な場合は、平均値ではなくパーセンタイルを記録してください。ユーザーが体感するのはテールレイテンシだからです。
- プロバイダーや目標解像度を変更した場合は、課金単位とモデルの挙動の双方が変化する可能性があるため、再度比較を実施してください。
採用された画像あたりのコストこそが、より高価なモデルがあなたのワークロードにおいてその料金に見合う価値があるかどうかを答えてくれる唯一の数値です。
リクエストの例
以下は、生成呼び出しの形式を示す説明用の例であり、実際の測定結果ではありません。aspect_ratio と resolution を公開しているモデルを使用しています。
curl https://api.tokenlab.sh/v1/images/generations \
-H "Authorization: Bearer $TOKENLAB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3-pro-image",
"prompt": "A cinematic portrait of a white cat sitting on a rainy windowsill",
"aspect_ratio": "16:9",
"resolution": "2k"
}'
そのレスポンスが status: "pending" で返ってきた場合は、失敗として扱うのではなく、返された poll_url をポーリングしてください。
APIフォーマット間でモデルへのアクセス方法は一様ではありません。TokenLabは Chat Completions、Responses、Anthropic Messages、および Gemini のリクエスト形式を受け付けますが、特定のモデルはそのうち一部のみをサポートしている場合があります。既存のクライアントを再利用する前に、モデルの tokenlab.accepted_request_formats を確認してください。詳細は APIフォーマット を参照してください。
本記事の制限事項
- 本記事には、いかなる画像モデルについても独立した品質ベンチマーク、レイテンシ測定値、またはスループットの数値は含まれていません。解剖学的構造、テキスト描画、フォトリアリズムに関するベンダーの位置づけ(宣伝文句)は事実として掲載していません。
- 価格は提示していません。画像モデルの価格単位は異なり、変更されることもあります。現在の値はモデルページまたは
GET /v1/models/{model}から取得してください。 - モデルの可用性は、配信オプションおよびワークスペースによって異なります。
tokenlab.deliveryAvailabilityは設定されたサポート状況を示すものであり、リクエスト実行時に確認されるリアルタイムの可用性を保証するものではありません。 - パブリックリージョンの制限が適用されます。
関連記事
出典
- https://docs.tokenlab.sh/guides/image-generation2026-09-27 時点で確認
- https://docs.tokenlab.sh/api-reference/images/create-image2026-09-27 時点で確認
- https://docs.tokenlab.sh/api-reference/images/edit-image2026-09-27 時点で確認
- https://docs.tokenlab.sh/api-reference/models/get-model2026-09-27 時点で確認
- https://docs.tokenlab.sh/guides/billing2026-09-27 時点で確認
- https://docs.tokenlab.sh/api-reference/models/list-models2026-09-27 時点で確認
- https://tokenlab.sh/models
- https://docs.tokenlab.sh/guides/async-jobs-polling2026-09-27 時点で確認



