Qwen Image 3.0 Pro 期間限定無料(2026):接続手順、本当の上限、429 対策

Qwen Image 3.0 Pro は ofox で $0、画像単価もゼロ。ただし期間限定かつ数量限定で連続実行は必ず 429。3分で接続、実測した上限、フェイルオーバーの実費まで。

Qwen Image 3.0 Pro 期間限定無料(2026):接続手順、本当の上限、429 対策

アリババは 2026-07-21 に Qwen Image 3.0 Pro を公開し、ofox には $0 で並びました。「トークンは無料だが画像単位の課金が裏に隠れている」タイプではありません。ofox 上の画像生成モデルの多くはまさにそう値付けされているのですが、これは画像単位の課金もゼロです。静かに減っていくトライアルクレジットではなく、本物のゼロです。

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

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

接続後にできること、できないこと

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

使うべき場合と、使うべきでない場合

使うべき場合:

  • 画像モデルを選定中で、予算を投じる前に自分のプロンプトで文字レンダリングを試したい。
  • 生成が散発的かつ対話的で、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.ai/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.ai/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:free サフィックスが抜けている正しくは bailian/qwen-image-3.0-pro:free、コロンも含む
data 配列が空プロンプトがコンテンツフィルタに当たった言い換える。このエンドポイントは明示的な拒否理由を必ずしも返さない

チーム・複数人での設定

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

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

  1. key ひとつ、キューひとつ。 各自のマシンから直接エンドポイントを叩かせず、単一ワーカーのジョブキューの後ろに生成を置く。これが実際に問題を解決する一手です。
  2. key ではなくモデルで分ける。 Qwen は ofox 唯一の無料画像モデルなので、これは実質「大量処理を有料モデルに移し、Qwen は組版で本当に勝つ場面に残す」という意味になります。Seedream 5.0 Lite の1枚 $0.035 が大量処理を置く最安の場所です。
  3. 自動フェイルオーバー。 429 を捕まえて、実スループットのある有料モデルにリトライする。1枚 $0.035〜$0.05 なら、数枚が通るコストはエンジニアが待つコストよりはるかに安い。

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

CHAIN = [
    "bailian/qwen-image-3.0-pro:free",      # $0、ただし数量制限あり
    "volcengine/doubao-seedream-5.0-lite",  # 1枚 $0.035
    "openai/gpt-image-2",                   # 入力 $4/M、出力 $24/M
]

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 は独自のスケジュールで失効するので、無料で生成したがファイルではなくリンクだけ保存した画像は、価格がどうなろうといずれ壊れます。

Qwen が絞られたときの代替

モデルofox 価格備考
bailian/qwen-image-3.0-pro:free$0、画像単位もなし唯一の本当の無料。数量制限あり、期限あり
volcengine/doubao-seedream-5.0-lite1枚 $0.035画像単位で最安。トークンでなく画像で課金
volcengine/doubao-seedream-4.51枚 $0.04同系列の前世代
volcengine/doubao-seedream-5.0-pro1枚 $0.05Seedream 最上位。中国系ラボを続けたいなら自然な最初の一手
google/gemini-3.1-flash-lite-image入力 $0.25/M、出力 $1.50/Mトークン課金。スループットが読める
google/gemini-3.1-flash-image入力 $0.50/M、出力 $3.00/Mトークン課金、上位
openai/gpt-image-2入力 $4/M、出力 $24/M(キャッシュ $1/M)最も予測可能

この表は注意して読んでください。価格ページは読み違えやすく、我々自身が最初に読み違えました。画像モデルの課金方式は統一されていません。 Seedream の行はトークン2列とも $0/M と表示され、無料に見えますが違います。生成された画像1枚ごとに課金され、請求書に届くのは Per Image の行です。画像モデルの $0/$0 というトークン行は何も語りません。

結果として Qwen Image 3.0 Pro は、トークンでも画像単位でも現時点でまったく課金されない ofox 上唯一の画像モデルということになります。これはこの話の心地よいバージョンを壊します。無料のフェイルオーバー先は存在しません。 数量制限に当たったとき、代替には金がかかり、安いほうで1枚 $0.035〜$0.05 です。大きな額ではありませんがゼロではなく、「無料」を前提に設計したパイプラインは自分がどちらなのかを知る必要があります。

Seedream は依然として最も自然な次の一手です。同じ base URL、同じ key、文字列ひとつの変更。ただし別系列であり、同じ4つの組版テストを回してはいないので、Qwen の文字レンダリングの代替として扱うのは仮定であって結論ではありません。

価格は 2026-07-23 に ofox のモデルページを個別に取得して確認しました。確認中にひとつ踏みました。gpt-image-2/v1/models API が我々の key に対して $5/M と $30/M を返し、これはモデルページで取り消し線が引かれている定価の列で、ofox の割引後価格は $4/M と $24/M です。key ひとつでしか試していないので、文書化された規則ではなく「API ではなくページを読むべき理由」として扱ってください。

有料帯の詳しい比較は Seedream 5.0 Lite と 4.5 の実測比較 に、生成が遅いときや 504 が意味するものは GPT-Image-2 の生成失敗と対処 に分けて書いています。

検証できなかった部分

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

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

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

本記事で確認した出典