Qwen Image 3.0 Pro APIの無料体験記録と現在の料金

2026年7月の無料体験で確認したQwen Image 3.0 Proの画像出力と429エラー。現在の有料料金と、無料ルート利用前の確認点も整理。

開いた石のアーチを額縁が次々と通り抜け、その脇に半分閉じたバルブと上限近くを指す圧力計が置かれた図。無料だが計量され絞られている接続を表す

料金・提供状況の更新(2026-09-16): 本文のコード、画像、制限の観測は7月23日の無料体験記録です。旧ID bailian/qwen-image-3.0-pro:free は現在のカタログにありませんが、それだけでは終了とも継続とも判断できません。過去のコードを使う前に確認してください。現在の qwen/qwen-image-3.0-pro は1枚 $0.07(定価と主供給元 Aliyun の価格が一致)です。現在の運用費をゼロとして計画しないでください。

アリババは 2026-07-21 に Qwen Image 3.0 Pro を公開し、ofox には $0 で並びました。「トークンは無料だが画像単位の課金が裏に隠れている」タイプではありません。ofox 上の画像生成モデルの多くはまさにそう値付けされているのですが、当時は画像単位の課金もゼロでした。これは7月23日の試用記録で、現在の無料提供を示すものではありません。

同時に、当時もこれを土台に製品を作るべき種類の無料ではありません。理由はモデルページの中国語の説明に書かれていて、英語の報道はほぼ素通りしています。本版本为限时免费体验版,目前为限量体验阶段(期間限定の無料体験版、現在は数量限定フェーズ)。期間と数量は別々の制約で、あなたの午後を実際に中断させるのは後者のほうです。

以下は、この無料枠が何を与え何を奪うか、そして gpt-image-2 のチュートリアルから写したコードを壊す3つの接続上の落とし穴です。本記事の画像はすべて 2026-07-23 に生成したモデルの生の出力です。

7月23日の体験版でできたこと

7月23日にできたことOpenAI 互換エンドポイント経由で $0 の画像生成(トークンも画像単位もゼロ)、text-to-image、任意サイズ
所要時間ofox の key があれば約3分
必要なものofox API Key、Python 3.8+ または Node 18+、おそらく既に入っている openai SDK
できないことバッチ実行。公表された配分に基づく計画。来月も同じ価格だという前提。base64 の取得。参照画像の利用(後述)

7月23日の試用から分かった用途と制限

使うべき場合:

  • 画像モデルを選定中で、予算を投じる前に自分のプロンプトで文字レンダリングを試したい。
  • 生成が散発的かつ対話的で、1時間に数枚程度。429 がジョブの失敗ではなくリトライ1回で済む。
  • 画像内に正しい日本語や中国語が必要で、今のモデルが崩す。ここが Qwen の本当の差別化点で、検証はタダです。

使うべきでない場合:

  • 大量生成。数量限定フェーズはスループットを読めなくし、バッチ処理において読めないスループットは明示された価格より厄介です。
  • レイテンシ要件がある。ここでの 429 のバックオフは数百ミリ秒ではなく数十秒の単位です。
  • 3か月間誰も見ないが動き続けなければならないものを書いている。無料という枠には明示的に期限があります。

やめてよい条件: 文字レンダリングの主張が本当かどうかだけ知りたいなら、下の4枚のテスト画像を見て本文の残りは飛ばして構いません。結論は「単語では成立し、連番では成立しない」で、これを知るだけなら何も接続する必要はありません。

前提

  • ofox の API Key。ofox コンソール で取得します。
  • Python 3.8 以上と openai>=1.0、または Node 18+ と openai。アリババのアカウントも DashScope の key もリージョン設定も不要です。
  • ファイルを書ける場所。このエンドポイントが返すのはバイト列ではなく URL で、そのリンクは長くは生きません。

3分で接続

Step 1: SDK を ofox に向ける

過去の体験版コードです。再利用前に提供状況と現在の料金を確認してください。

from openai import OpenAI

client = OpenAI(
    base_url="https://api.ofox.run/v1",
    api_key="YOUR_OFOX_KEY",
)

期待される結果:出力なし。import に失敗する場合は pip install -U openai で更新します。

Step 2: モデルを呼ぶ

過去の体験版コードです。再利用前に提供状況と現在の料金を確認してください。

resp = client.images.generate(
    model="bailian/qwen-image-3.0-pro:free",
    prompt="A ceramic mug on a linen cloth, morning light, shallow depth of field",
    size="1024x1024",
    n=1,
)
print(resp.data[0].url)

期待される結果:https://dashscope-*.oss-accelerate.aliyuncs.com/... という URL が標準出力に出ます。

Node の場合:

過去の体験版コードです。再利用前に提供状況と現在の料金を確認してください。

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.ofox.run/v1",
  apiKey: process.env.OFOX_API_KEY,
});

const r = await client.images.generate({
  model: "bailian/qwen-image-3.0-pro:free",
  prompt: "A ceramic mug on a linen cloth, morning light",
  size: "1024x1024",
  n: 1,
});
console.log(r.data[0].url);

Step 3: 期限が切れる前にバイト列を落とす

過去の体験版コードです。再利用前に提供状況と現在の料金を確認してください。

import urllib.request

urllib.request.urlretrieve(resp.data[0].url, "out.png")

期待される結果:out.png がディスクに保存されます。1024x1024 でおよそ 1〜1.5 MB。

これは省略可能な後片付けではありません。URL をデータベースに書く前に次節を読んでください。

写したコードを壊す3つの詳細

1. base64 ではなく URL が返る

出回っている画像生成のチュートリアルの多くは gpt-image-2 向けに書かれていて、あれは b64_json を返します。このエンドポイントの Qwen 3.0 Pro は url を返し、b64_json は空です。こう書くと落ちます。

過去の体験版コードです。再利用前に提供状況と現在の料金を確認してください。

raw = base64.b64decode(resp.data[0].b64_json)   # Qwen では TypeError

複数モデルをルーティングするなら両方の形を扱ってください。

過去の体験版コードです。再利用前に提供状況と現在の料金を確認してください。

item = resp.data[0]
raw = (base64.b64decode(item.b64_json) if item.b64_json
       else urllib.request.urlopen(item.url).read())

URL はアリババの OSS を指し、署名と有効期限が付いています。バイト列を保存してください。 データベースに保存された URL は、後で壊れた画像になります。

2. 無料の配分は「日単位」ではなく「その瞬間」

RPM の数値は公表されていないので、観測できる範囲を測りました。リクエストを連続して投げると2本目で即 429 Requests rate limit exceeded。生成プロセスを2つ並列で走らせると両方が 429 になり、片方を落とすまでどちらも進みません。単一のシリアルなワーカーで 45 秒から増やすバックオフをかけた場合は、投げたリクエストがすべて完走しました。

呼び出しパターン結果
連続して2本2本目が即 429
同一 key で2プロセス並列両方 429、片方を落とすまで進まない
単一ワーカー、45秒バックオフ、ジョブ間 20 秒すべて完走
同じパターンで4ジョブ連続4件とも完走、最初にクリアした後は 429 なし

並列度があると即 429、厳密に直列なら寛容という形は、数量限定フェーズを外から見たときの典型です。障害ではなく、強くリトライするほど悪化します。

過去の体験版コードです。再利用前に提供状況と現在の料金を確認してください。

import time, openai

def generate(prompt, size="1024x1024", tries=6):
    for i in range(tries):
        try:
            r = client.images.generate(
                model="bailian/qwen-image-3.0-pro:free",
                prompt=prompt, size=size, n=1)
            return r.data[0].url
        except openai.RateLimitError:
            time.sleep(45 * (i + 1))
    raise RuntimeError("配分が最後まで空かなかった")

# OpenAI SDK 経由では 429 は openai.RateLimitError として届きます。
# urllib の HTTPError(429) を捕まえられるのは HTTP を直接叩いた場合だけです。

3. サイズに enum の縛りがない

固定リストのサイズしか受け付けず、それ以外を拒否する画像エンドポイントは少なくありません。だから世の画像生成コードには「ワイド」をベンダー固有の文字列に写像する対応表が付いて回ります。このエンドポイントはそうではないようです。

渡したサイズ返却用途
1024x1024そのまま既定の正方形
1024x1536そのまま縦、ポスターやスペックカード
1664x928そのままワイド、16:9 に近い

渡した値どおりの解像度で返ってきました。固定比率のブログ用ヘッダー画像や SNS カードを作るなら、正方形で生成してから切るのではなく最終寸法を直接指定できます。構図の頭が切れる工程がひとつ減ります。

ただしこれは実測された挙動であって文書化された契約ではありません。特に比率が狂うと崩れるレイアウトに流し込むなら、返ってきた寸法を検証してください。

参照画像:動作させられませんでした

モデルページには text-to-image と並べて参照画像入力が書かれています。このエンドポイントでは動作させられず、その失敗の仕方が記録に値します。静かだからです。

Test 1 のエスプレッソマシンのポスターを元画像として、レイアウトとスペック値を保ったままインクスケッチ風にする指示で3つの書き方を試しました。

試行結果
images.generate(..., image="data:image/png;base64,...")HTTP 200、画像は返るが参照は完全に無視
images.generate(..., image_url="data:image/png;base64,...")HTTP 200、画像は返るが参照は再現されず
POST /images/editsHTTP 400 You must provide a model parameter(body に model はある)

1つ目が最も明快です。写実的なエスプレッソマシンのポスターを与えたのに、返ってきたのは植物系美容液の広告でした。スタイルは合っていて、被写体はまったく無関係。参照画像からは何も残っていません。

2つ目は一見近く、詳細に見るとより示唆的です。元のポスターはボイラー 1.6 L、重量 12.4 kg ですが、新しい画像は 2.0 L と 28 kg。4行の表は8マスのグリッドになり、製品写真は引き出し線付きの断面図になり、保証の行は消えました。唯一一致した 9 bar は世のすべてのエスプレッソマシンの標準圧力なので、何の証拠にもなりません。

つまりモデルはプロンプトの文字から新しく描き起こしただけで、参照画像を読んでいません。3つ目はさらに厄介で、実在する model パラメータについて「ない」と訴える 400 は、自分のシリアライズを 20 分疑わせます。

正確に言えるのはこうです。このモデルは参照画像入力が文書化されているが、ofox の OpenAI 互換画像エンドポイント経由でそれを届けるパラメータの書き方を我々は見つけられなかった。アリババのネイティブな DashScope API なら動くかもしれませんし、正しいパラメータ名を試していないだけかもしれません。確かなのは、それが大きな声で失敗しないということです。使うなら 200 を成功と見なさず、出力が入力を反映しているか検証してください。

文字レンダリングの主張は成立するか

アリババがこの世代で押しているのは組版です。小さな文字が読めること、長いプロンプトが破綻しないこと、複数の文字体系が1枚に共存すること。いずれも検証可能なので検証しました。以下はすべて指定サイズでの生の出力で、レタッチも複数試行からの選別もしていません。

テスト1:スペック表の小さな文字。 正確な数値を持つ4行と、最下部の細かいシリアル行を指定しました。

架空のエスプレッソマシンの製品ポスター。見出しは ATLAS ONE、スペック表に Pressure 9 bar、Boiler 1.6 L、Weight 12.4 kg、Warranty 24 months が並び、最下部に Serial AT-2026-0731 / Made in Suzhou という細字がある

すべての値が正確です。Pressure 9 barBoiler 1.6 LWeight 12.4 kgWarranty 24 months。最下行は Serial AT-2026-0731 / Made in Suzhou で、スラッシュもハイフン入りのシリアルも正しい。1024x1536 においてこの細字はおよそ 8pt 相当です。欠字なし、捏造文字なし、小さいサイズでの潰れもなし。画像モデルが普段ボロを出すのはまさにここです。

テスト2:1枚に2つの文字体系。 同じ案内板に英語と中国語がそれぞれ独立した行で入り、数字を共有します。

濃紺の会議案内板。英語で DEVELOPER TRACK HALL B、その下に中国語で開发者专场 B 馆、さらに Registration 09:00 と注册签到 09:00、右側に右向きの矢印

どちらの文字体系も正しい。开发者专场注册签到 は構造の整った漢字で、多くの画像モデルが出す「漢字の形をしたノイズ」ではありません。ラテン文字と中国語のウェイトも揃い、両行の 09:00 も一致します。

西洋の画像モデルで CJK のポスターを作ろうとした経験があれば、この1枚の意味がわかるはずです。本記事で最も興味深い結果で、しかもタダで自分で再現できます。

テスト3:ラベルの多い技術図。 ここは普通なら崩れます。プロンプトは登場すべき5つの文字列(CLIENTGATEWAYMODELRESPONSE、および auth / route / inference の凡例)を指定し、各ブロック下の説明文は指定しませんでした。

Three-Step API Request Flow と題されたフラットベクターのインフォグラフィック。CLIENT、GATEWAY、MODEL のブロックが番号付き矢印で結ばれ、下に RESPONSE の弧状矢印が戻り、左下に auth・route・inference の凡例がある

指定した5つの文字列はすべて正しく、位置も適切でした。注目すべきは指示していない部分です。タイトルを足し、矢印に 1. Request / 2. Forward / 3. Output と番号を振り、各ブロックの説明を技術的に筋の通った文で書いています(ゲートウェイの下は「Validates authentication / Routes to endpoint」)。綴りも全体を通して崩れていません。

ドキュメント用の図の初稿としては十分あり得ます。ただし信頼できるという意味ではありません。補われた説明はあなたのアーキテクチャに対するモデルの推測で、外していても同じ自信で書かれます。

テスト4:本当に壊れる場所。 ファイルツリー、シンタックスハイライトされた Python、そして 1 から 14 までの行番号が見えるコードエディタのスクリーンショットを要求しました。

ダークテーマのコードエディタのモック。ファイルツリーに main.py、utils.py、config.yaml があり、中央にシンタックスハイライトされた Python、下部のステータスバーに UTF-8 CRLF Python 3.12 Ln 8 Col 22 Spaces 4 と表示されている

外枠はほぼ完璧です。ファイル名は正しくアイコンも一致し、ステータスバーは UTF-8 CRLF Python 3.12 Ln 8, Col 22 Spaces: 4 と指定どおり、メニューバーも筋が通り、シンタックスハイライトもキーワード・文字列・関数名にもっともらしい色を割り当てています。

そこで行番号の列を見てください。1, 3, 3, 4, 6, 7, 9, 8, 0, 8, 11, 11, 12, 13, 14。2 も 5 も 10 もなく、重複が複数あり、0 が紛れ込んでいます。そしてコードの最終行は if __name__ = "__main__":。Python がイコール2つを要求する場所にひとつしかありません。

これがこのモデルの正直な境界です。単語は——小さくても中国語でも——正しく出る。連番は出ない。 行番号の列は単調な計数に対する最も純粋な試験で、モデルが出したものは遠目には数えているように見え、近づくと崩れます。== であるべき = は同じ弱点の別の現れ方です。

実務上の規則:読者が文字を言語として読む用途ならすべて使える。読者が literal に正しいと受け取るコードのスクショや、軸ラベルが実在する連番でなければならないグラフには使わない。これはより良いプロンプトで直せる問題ではなく、このモデルが現時点で不得手なことそのものです。

接続時によくあるエラー

エラー意味対処
429 Requests rate limit exceeded無料枠の数量制限。障害ではないリクエストを直列化し、45 秒から増やしてバックオフ。並列化しない
b64_json での TypeError: expected str, got Nonegpt-image-2 のコードを写したdata[0].url を読んで取得する
画像 URL が後から 403OSS の署名付き URL が失効生成時に即ダウンロードし、バイト列を保存
model_not_found古い、または利用できないモデルID現行カタログと利用権限を確認。:free を付けても利用できるとは限りません
data 配列が空プロンプトがコンテンツフィルタに当たった言い換える。このエンドポイントは明示的な拒否理由を必ずしも返さない

チーム・複数人での設定

数量制限はチームに対して個人よりも大きな影響を持ちます。同僚どうしが互いを絞るからです。2人が同じ無料モデルに向かって同時にプロンプトを試すのは、確実に 429 を引き起こす並列パターンそのものです。

対処は手間の小さい順に3つ。

  1. key ひとつ、キューひとつ。 各自のマシンから直接エンドポイントを叩かせず、単一ワーカーのジョブキューの後ろに生成を置く。これが実際に問題を解決する一手です。
  2. 現在の代替モデルは用途、モデルID、料金を確認して選んでください。過去の無料体験から、今日も無料で切り替えられるとは判断できません。安い表示価格がスループットを保証するわけでもありません。
  3. 確認済みの有料モデルへ切り替える。 再試行の転送先は、現在の料金・レート制限・アカウントの利用条件を確認してから選んでください。下表の Seedream の画像単価は、サンプル内のすべての切り替え先の費用や処理速度を保証するものではありません。

すべてが同じ base URL と同じ key の後ろにあるため、3番目は model 文字列の変更であって2つ目の接続作業ではありません。

過去の体験版コードです。再利用前に提供状況と現在の料金を確認してください。

CHAIN = [
    "bailian/qwen-image-3.0-pro:free",      # 7月23日の体験版:$0、数量制限あり
    "volcengine/doubao-seedream-5.0-lite",  # 1枚 $0.035
    "openai/gpt-image-2",                   # 7月23日の割引記録。現在の料金は下表
]

def generate_with_failover(prompt, size="1024x1024"):
    for model in CHAIN:
        try:
            r = client.images.generate(
                model=model, prompt=prompt, size=size, n=1)
            return model, r.data[0]
        except Exception as e:
            if "429" not in str(e):
                raise
    raise RuntimeError("すべてのプロバイダが絞られている")

モデル名を画像と一緒に返してください。あるバッチだけ雰囲気が違う理由を後で調べるとき、どの画像を誰が生成したか分かっていると1時間節約できます。

無料の窓が閉じる日への備え

終了日のない「期間限定」は、値付けの注記に見せかけたスケジュールの問題です。実際の障害は請求が来ることではありません。ある朝 model ID が解決しなくなる、あるいは有料の変種に解決するようになり、それを組み込んだ何かが動かなくなり、理由を覚えているメンバーが誰もいない、というものです。

安価な予防策が3つ。いずれも接続作業より時間はかかりません。

  • model ID を設定に置く。 6か所の呼び出し地点に散らすのではなく、環境変数の文字列ひとつ。多くのチームにとってはこれが緩和策のすべてです。
  • どのモデルが各画像を生成したか記録する。 出力品質が変わったとき、自分のプロンプトを疑う前に、足元でモデルが入れ替わったかどうかを知る必要があります。
  • フェイルオーバー先の価格を先に知っておく。 下の表は、429 が恒常化する前に判断が済んでいるようにするためにあります。

生成画像をアーカイブするなら、これは聞こえる以上に重要です。署名付き OSS の URL は独自のスケジュールで失効するので、無料で生成したがファイルではなくリンクだけ保存した画像は、価格がどうなろうといずれ壊れます。

現在の有料モデル料金(2026年9月16日)

モデル現在のOfox料金料金の区分
qwen/qwen-image-3.0-pro$0.07 / 1枚定価 = Aliyun
volcengine/doubao-seedream-5.0-lite$0.035 / 1枚定価 = Volcengine
volcengine/doubao-seedream-4.5$0.04 / 1枚定価 = Volcengine
volcengine/doubao-seedream-5.0-pro定価 $0.05; Volcengine $0.04 / 1枚主供給元
google/gemini-3.1-flash-lite-imageテキスト入力 $0.25/M; 画像出力 $30/M定価
google/gemini-3.1-flash-imageテキスト入力 $0.50/M; 画像出力 $60/M定価
openai/gpt-image-2テキスト入力 $5/M; 画像出力 $30/M定価 = OpenAI

通貨はUSD。Mは100万トークンで、100万枚ではありません。GPT Image 2の画像入力は $8/M、キャッシュ済みテキスト入力は $1.25/M、キャッシュ済み画像入力は $2/M です。現在のOpenAI供給元価格は定価と同額です。7月23日の $4/$24 は過去の割引で、現在の料金ではありません。総額は利用したトークン区分と量で変わります。

現在の代替モデルは用途、モデルID、料金を確認して選んでください。過去の無料体験から、今日も無料で切り替えられるとは判断できません。安い表示価格がスループットを保証するわけでもありません。

過去の確認記録(2026-07-23): 当時はGPT Image 2のページに入力 $4/M・出力 $24/M、APIに $5/M・$30/M が表示されました。これは実際の課金検証ではなく、カタログよりWebページを優先すべきだという根拠にはなりません。現在の料金は上の表を参照してください。

検証できなかった部分

今回のリリースの報道の多くが触れていないので、抜けを明示しておきます。

  • ベンチマークがない。 アリババはこの世代を技術レポートも公開評価値もなしに出しました。世に出ている Qwen Image 3.0 Pro のランキングはすべて誰かの主観で、我々のものも含みます。
  • オープンウェイトがない。 以前の Qwen-Image 世代にはダウンロード可能な重みがありましたが、この世代にはありません。したがってセルフホストは数量制限の逃げ道になりません。
  • 公表されたレート制限がない。 上の数値は key ひとつ・ある日の午後の観測であって、文書化された制限ではありません。あなたの環境では違うかもしれず、アリババは誰にも告げずに変更できます。
  • 無料価格の終了日がない。 日付のない「期間限定」が開示のすべてです。
  • 長いプロンプトの主張は未検証。 アリババが謳うプロンプト処理能力は数千トークン規模です。我々のテストプロンプトは各数十語で、4,000 トークンの場面描写が破綻しないかどうかについては何も言えません。数量制限のせいで一度に負荷試験をやり切るのは現実的でなく、やったふりはしません。
  • サンプル数は4。 4つのプロンプト、各1回、リトライも選別もなし。小さな文字が出ること、数字の連番が崩れることを示すには十分ですが、どちらにもパーセンテージを付けるには足りません。

明記する理由はこうです。今回のリリースの報道の多くは、アリババの機能一覧を測定結果のように復唱しています。機能一覧は主張です。上の4枚は4つのデータ点で、主張より多く、ベンチマークよりはるかに少ない。

7月の検証と9月の料金更新の出典

よくある質問

Qwen Image 3.0 Pro は本当に無料ですか?
無料ルートは2026年7月に検証したものです。現在の無料提供は未確認です。9月16日のカタログでは qwen/qwen-image-3.0-pro は1枚 $0.07。旧 :free ID が見つからないことだけで終了したとは断定できません。
無料期間はいつまでですか?
7月23日に確認した体験版の資料には終了日がありませんでした。今回、体験版の継続は確認できていません。呼び出し前にモデルID、料金、アカウントの利用条件を確認してください。
なぜ 429 が出るのですか?
2026年7月23日の検証:無料が価格だけでなく数量も制限しているからです。実測では、連続して2本目のリクエストを投げた時点で即 429。2プロセスを並列で走らせると互いに詰まり、どちらも進みません。シングルスレッドで 45 秒から始めて増やしていくバックオフだけが最後まで走り切りました。リミッタが見ているのは総量ではなく並列度とバーストです。
レスポンスは base64 ですか、URL ですか?
2026年7月23日の検証:URL です。data[0].url に DashScope の OSS へのリンクが入り、data[0].b64_json は空です。gpt-image-2 のチュートリアルから写したコードは base64.b64decode(None) で落ちます。URL を自分で取得してディスクに書いてください。署名付きで期限があるため、リンクを保存するのではなくバイト列を保存する必要があります。
小さな文字は正確にレンダリングされますか?
2026年7月23日の検証:単語は正確、連番は不正確です。スペック表の 8pt 相当の行はすべて指定どおりで、最下部の細かいシリアル行まで一字違わず出ました。英中混在の字形も正しいです。しかしコードエディタのモックでは行番号が 1, 3, 3, 4, 6, 7, 9, 8, 0, 8 となり、Python の比較演算子がイコール1つで書かれていました。
コードのスクリーンショット生成に使えますか?
2026年7月23日の検証:読者が literal に正しいと受け取る用途には使えません。エディタの外枠やファイル名はかなり説得力がありますが、行番号の列は単調増加でなく重複もあり、コード中に演算子の誤りが入りました。単語が強みで、連番が弱点です。
対応するサイズは?
2026年7月23日の検証:渡したサイズがそのまま返ってきました。1024x1024、1024x1536 の縦、1664x928 のワイドすべてです。固定のアスペクト比 enum しか受け付けない画像エンドポイントとは違います。
ofox に他の無料画像モデルはありますか?
トークン単価がゼロでも画像生成が無料とは限りません。旧Qwen無料ルートの現状は未確認で、現在のProは1枚 $0.07 です。以下のSeedreamやトークン課金の代替モデルには料金がかかります。
トークン単価が $0 なら Seedream はいくらですか?
Seedreamは画像単位です。5.0 Proの定価は1枚 $0.05、主供給元Volcengineは $0.04。5.0 Liteは $0.035、4.5は $0.04 です。他のモデルでは画像トークン課金の場合もあります。
ofox で参照画像は使えますか?
2026年7月23日の検証:参照画像入力はドキュメント上は対応とされていますが、ofox の OpenAI 互換画像エンドポイント経由では動作させられませんでした。image と image_url のどちらのパラメータも HTTP 200 を返しながら参照を無視し、/images/edits は body に model があるのに「model パラメータがない」という 400 を返します。静かに失敗するので、200 を信じずに出力そのものを検証してください。