メインコンテンツへスキップ

Qwen-Image-2.1を無料APIで使う方法:ModelScopeの設定とPythonコード

13 分で読めますAPI

Qwen-Image-2.1には、ModelScopeの無料API-Inferenceから接続できます。本人確認済みアリババクラウドアカウントとの連携と魔粒残高が前提です。トークンの準備から非同期タスクの送信、状態確認、画像保存までを説明します。

PythonからModelScopeへ画像生成を依頼し、結果の画像を受け取る流れのイメージ

Qwen-Image-2.1を自分のプログラムから無料で試すには、ModelScopeのAPI-Inferenceを利用できます。モデルIDは Qwen/Qwen-Image-2.1 です。登録したModelScopeアカウントに、本人確認を済ませたアリババクラウドアカウントを連携し、アクセストークンと利用に必要な「魔粒」の残高を用意します。2026年9月23日時点で、対象モデルの公式ページに、このモデルを指定する非同期APIの例が掲載されています。

最初のリクエストで画像そのものが返るわけではありません。生成を依頼して task_id を受け取り、完了を確認してから画像をダウンロードする流れです。以下は公開ドキュメントに基づく接続例で、この記事では実際の画像生成リクエストを送信していません。

まずアカウントとトークンを用意する

必要なのは、ModelScopeのトークンです。通常のDashScope用APIキーをそのまま使う手順ではありません。

  1. ModelScopeに登録してログインします。
  2. 個人情報を入力し、メールアドレスの認証を済ませます。
  3. アリババクラウドアカウントを連携し、連携先のアカウントで本人確認を完了します。
  4. アクセストークンの管理画面を開き、APIで使うトークンを取得します。
  5. Qwen-Image-2.1のモデルページで「API-Inference」を開き、提供元が「魔搭社区」であること、魔粒残高と表示される予定消費量を確認します。

アカウント連携と本人確認は、API-Inferenceの利用条件に記載されています。日本語で情報を読めることと、そのアカウントで本人確認を完了できることは別です。居住国ごとの利用資格は、この説明だけでは確定できません。まず自分のアカウントで上の条件を満たせるか確認してください。

トークンの扱いは公式のトークンガイドも参照できます。以下ではコードへの直書きを避け、環境変数 MODELSCOPE_TOKEN から読み込みます。Webアプリに組み込む場合も、トークンをブラウザーに配信せず、サーバー側で保持します。

Pythonで送信から画像保存まで実行する

生成の依頼、タスクIDの受領、状態確認、画像保存という非同期APIの流れ

Python環境に、HTTP通信と画像保存に使うライブラリをインストールします。

bash
python -m pip install requests Pillow

macOSまたはLinuxのbash・zshでは、次のようにトークンを非表示で入力できます。入力値を含むコマンドをシェル履歴に残さずに済みます。

bash
printf 'ModelScope token: ' read -r -s MODELSCOPE_TOKEN printf '\n' export MODELSCOPE_TOKEN

次のコードを generate_image.py として保存してください。公式モデルページのリクエスト形式を使い、HTTP通信のタイムアウトと待機時間の上限を加えています。待機上限はこの例で設定した値で、サービスの処理時間を保証するものではありません。

python
import os import time from io import BytesIO from pathlib import Path import requests from PIL import Image BASE_URL = "https://api-inference.modelscope.cn" TOKEN = os.environ["MODELSCOPE_TOKEN"] HEADERS = { "Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json", } # 1. 画像生成を依頼する。自動的な再送は行わない。 response = requests.post( f"{BASE_URL}/v1/images/generations", headers={**HEADERS, "X-ModelScope-Async-Mode": "true"}, json={ "model": "Qwen/Qwen-Image-2.1", "prompt": "A golden cat sitting by a sunlit window, watercolor", }, timeout=60, ) response.raise_for_status() task_id = response.json()["task_id"] print(f"task_id: {task_id}", flush=True) # 2. 同じタスクの状態を5秒間隔で確認する。 deadline = time.monotonic() + 600 while time.monotonic() < deadline: response = requests.get( f"{BASE_URL}/v1/tasks/{task_id}", headers={ **HEADERS, "X-ModelScope-Task-Type": "image_generation", }, timeout=60, ) response.raise_for_status() result = response.json() status = result["task_status"] print(f"status: {status}", flush=True) if status == "FAILED": raise RuntimeError(f"生成に失敗しました。task_id={task_id}") if status == "SUCCEED": image_urls = result.get("output_images", []) if not image_urls: raise RuntimeError("完了しましたが画像URLがありません。") # 3. 返された画像URLから取得し、PNGで保存する。 # ModelScopeの認証トークンは画像配信先には送らない。 image_response = requests.get(image_urls[0], timeout=60) image_response.raise_for_status() output_path = Path("qwen-image-2-1.png") with Image.open(BytesIO(image_response.content)) as image: image.save(output_path, format="PNG") print(f"保存先: {output_path.resolve()}") break time.sleep(5) else: raise TimeoutError( f"待機を終了しました。再送せず、このtask_idの状態を確認: {task_id}" )

実行コマンドは次のとおりです。

bash
python generate_image.py

task_id が表示された段階では、依頼が受け付けられただけです。成功の目印は task_statusSUCCEED になり、output_images のURLから画像を取得して、作業フォルダーに qwen-image-2-1.png が保存されることです。この例では返された最初の画像を保存します。APIのフィールドとヘッダーはModelScopeの2.1用サンプルに基づきます。

待機中や通信エラーで止まったら

task_id を受け取った後に停止した場合は、最初のPOSTからやり直す前に、同じIDを GET /v1/tasks/{task_id} で確認します。上のコードでは状態取得部分に当たります。ローカルの待機時間が切れても、サーバー上の生成まで中止されたとは限りません。

認証や利用資格のエラーなら、トークン、アカウント連携、本人確認の状態を順に確認します。残高不足なら魔粒の入出庫記録と有効期限を確認してください。混雑や制限を示す応答がある場合は、並列数を下げて時間を置きます。FAILED が返った場合は生成失敗として扱い、返されたエラー内容を確認してから原因に応じて修正します。理由を確認せず新しい生成タスクを連続作成すると、余計な消費や重複処理につながります。

無料で何枚作れる? 現在は「魔粒」の残高で決まる

魔粒が画像生成や学習などに共通で使われ、残高と生成枚数は同じではないことを示す図

Qwen-Image-2.1を毎日何枚生成できるかは、固定の枚数では案内できません。 現行のModelScope API-Inferenceは魔粒を消費する仕組みで、モデルページに表示される予定消費量とアカウント残高の確認が必要です。古い記事にある「1日2,000回」「同じモデルは500回」を、2.1の現在の上限として使わないでください。現行のAPI制限は、魔粒の残高とモデルごとの消費を基準に説明しています。

魔粒の公式説明では、現在、次のような付与条件が案内されています。

条件・項目現行の説明
毎日のログイン短期魔粒200を付与。1日1回まで
アリババクラウド連携後の毎日のログイン追加で短期魔粒50を付与。1日1回まで
利用前の準備個人情報の入力とメールアドレスの認証
有効期限短期は24時間、長期は90日。早く期限を迎えるものから消費
利用先API以外のAIGC推論・学習などとも共通

短期魔粒の説明には「当日有効」という表記もあるため、実際の期限と付与の有無はアカウントの記録で確認してください。ここで示したのは付与ルールであり、特定のアカウントへの入庫を実測した結果ではありません。

APIの一般的な消費区分は、1回あたり0.5・1・2魔粒です。ただし、確認時の匿名表示ではQwen-Image-2.1の具体的な消費量を確定できませんでした。したがって、200と50を足して「毎日250枚無料」とすることも、任意の区分で割って生成枚数を保証することもできません。他の用途による消費や期限切れも、使える残高に影響します。

また、この無料APIは非商用の体験向けです。同時実行数はサービスの負荷に応じて調整され、高並列処理やSLAを必要とする本番運用のためのサービスではありません。小規模な接続確認と継続的なサービス運用は、公式の利用制限に照らして分けて判断してください。

アカウント条件が合わないときは、公式Spaceのデモも候補になる

ModelScopeの本人確認を完了できず、まずコードからデモを試したい場合は、Qwen公式のHugging Face Spaceに公開されているGradioクライアント用の入口を確認できます。API名は /generate_with_enhance です。公開スキーマでは、次の最小形が案内可能です。

bash
python -m pip install gradio_client
python
from gradio_client import Client client = Client("Qwen/Qwen-Image-2.1") result = client.predict( input_images=[], original_prompt="A golden cat sitting by a sunlit window, watercolor", api_name="/generate_with_enhance", ) print(result)

戻り値は画像のファイル情報、seed、書き換え後のプロンプトです。これは公開デモのAPI仕様に基づく未実行の例で、常時利用や固定の無料枠を保証するものではありません。起動状況、待ち行列、引数は変更され得るため、接続時にはSpaceの「Use via API」で最新のコードを確認してください。

Hugging FaceのモデルページにInference Providerへの未配置が表示されていても、SpaceのクライアントAPIとは別の話です。一方、このデモが動くことから、通常のDashScopeキーでも同じモデルを呼び出せるとは判断できません。確認したAlibaba Cloud Model Studioの正式な画像API一覧には2.1が載っておらず、2.0や3.0のモデル名を流用する手順にはしないでください。

無料利用と商用利用は分けて確認する

無料枠があること、重みをダウンロードできること、商用利用が認められていることは、それぞれ別の条件です。Qwen-Image-2.1のQwen Research Licenseでは、モデルなどの対象物を研究・評価目的の非商用利用に限定し、商用利用には別途許可を求めています。Apache 2.0として扱うことはできません。

商用アプリへ組み込むなら、利用するホスティングサービスの契約条件と、モデルに必要な商用許可をそれぞれ確認します。このモデルライセンスの説明だけで、あらゆる生成物の利用条件まで一律に結論づけることは避けてください。

GPUを自分で用意できる場合は、Qwen-Image-2.1をローカルで動かす方法も選択肢です。ただし、重みの取得費用とGPUの稼働費用は別であり、ローカル実行に切り替えてもライセンスの条件はなくなりません。

無料APIへの最初の接続では、ModelScopeのモデルページで利用資格と消費量を確認し、1つのタスクを送信して画像保存まで進めてください。その時点で確認できる残高、処理時間、利用条件をもとに、継続利用に向くかを判断できます。

#Qwen-Image-2.1#ModelScope#画像生成API#Python
Share: