「Grok Imagine の API、Python から叩いて自分のアプリや社内ツールに組み込みたい」「料金もリトライも分かったうえで稟議に出したい」——そう考えた瞬間に、公式ドキュメントだけでは流れが繋がらず手が止まった方は多いはずです。
本記事では、Grok Imagine API を Python から動かすまでの最短ルートを、認証 → 画像生成 → 画像から動画への変換 → 月額の試算 → 失敗時のリトライ → 商用利用までを一気通貫で扱います。コピペで動く最小サンプルと、稟議用にそのまま貼れる試算スクリプトを通しで用意するので、読み終えたときには「とりあえず動かす」段階から「業務に乗せる前提で運用設計まで決められる」段階まで一段引き上がっているはずです。
社会人・実務者の目線で必要な情報だけを順に並べているので、上から読むだけで自分のプロダクトや社内 PoC への組み込み判断ができるようになります。
内容をまとめると…
Grok Imagine API は OpenAI 互換 SDK の base_url 差し替えだけで叩ける
I2V は同期ではなく非同期ジョブ + ポーリング設計が前提
1 画像 $0.02 / 1 秒 $0.05、リトライ込みの月額試算は 1.3 倍が安全マージン
429・5xx はリトライ、4xx モデレーション拒否は即時失敗で分岐させる
商用利用は基本可だが、第三者への再販・モデレーション違反は契約前に要確認
きれいな画像を作れるようになっただけで、収益化できずに止まってませんか?
romptn ai では、実際に画像生成AIで稼いでいるプロを講師に招いた完全無料のAIクリエイターセミナーを開催しています。
2時間のオンラインセミナーで、実際に稼いでいる人が使う最新画像生成AIツールや上級者にステップアップするための必須スキルなどの知識面はもちろんのこと、ゼロから収益化を実現するための具体的なロードマップを体験談ベースで詳しく学ぶことができます。
また、豪華な無料参加特典も用意していますので、ぜひご興味を持った方はお気軽に下記のボタンから詳細をチェックしてみてください!
\ 現役の画像生成AIのプロから学べる! /
無料セミナーの詳細をみるGrok Imagine APIとは
まずは「Grok Imagine API でできること」と「ふだん触る X Premium の Imagine とは何が違うのか」を一段だけ整理しておきます。
Grok Imagine API は、xAI が公式に提供している画像・動画生成 API です。プロンプトから画像を作る T2I (Text To Image) と、作った画像を短い動画に変換する I2V (Image To Video) の 2 系統が同じ API キーで使えます。料金は執筆時点で 1 画像あたり $0.02、動画は 1 秒あたり $0.05 とアナウンスされており、これは月数百枚〜数千枚規模の自動化を視野に入れたときに現実的なコストラインです。
X Premium の Imagine が「ブラウザでぽちぽち生成する用」だとすれば、API 版は「自分のアプリ・社内ツール・バッチ処理に組み込む用」と覚えると区別しやすいです。たとえばユーザーが投稿した文章から自動で OGP 画像を作る、社内資料の差し込み画像を毎週バッチで再生成する、画像から短い動画クリップを作って SNS に流す、といった処理はすべて API 経由でないと自動化できません。
もう一つ実務で効いてくる前提として、xAI の API は OpenAI 互換のエンドポイント を意識して設計されています。普段 openai Python パッケージを使っている人なら、base_url と api_key を差し替えるだけで Grok Imagine を呼べる場面も多く、学習コストが極端に低い点が個人開発・受託案件で選ばれる理由になっています。
事前準備とAPIキーの取得
次は、実際にコードを書き始める前にそろえておくものを順に確認します。ここでつまずくと「動くはずのサンプルが 401 で落ちる」という典型の沼に入りやすいので、最初に整えてしまいましょう。
必要な準備は次の 4 つに集約できます。
- xAI アカウントと API キー:xAI のコンソール(console.x.ai)でアカウントを作り、ダッシュボードの API Keys から新しいキーを発行します。発行後の文字列は一度しか表示されないので、必ずパスワードマネージャか後述の環境変数に保存してください。
- 支払い方法の登録:API は前払いクレジット制で、最初に少額($5〜$10 程度)チャージしてから利用する流れです。クレジット未登録だと最初のリクエストで
invalid_request_errorが返ります。 - Python 3.10 以上:Grok Imagine 用の Python サンプルは
match文や型ヒントを使うため、3.10 以上を推奨します。python --versionで確認しておきましょう。 - HTTP クライアント or SDK の選択:
requestsだけでも叩けますが、本記事では OpenAI 互換のしくみを活かせるopenai公式パッケージを軸にします。
キー文字列はコードに直書きせず、必ず環境変数で渡します。ターミナル側で次のように設定してください。
export XAI_API_KEY="xai-xxxxxxxxxxxxxxxx"
Python 側で読み込むときは、コードベースの規約に合わせて os.environ["XAI_API_KEY"] を使うか、python-dotenv で .env から取り込みます。Git に誤って push してしまうとキーは即座に無効化されるので、.env は .gitignore に入れておくのが安全です。
最後に、Python パッケージを入れておきます。openai(OpenAI 互換クライアントとして)、本文の後半で使う tenacity(リトライ)、画像保存に使う requests の 3 つです。
pip install openai tenacity requests
ここまで揃えば、次の章でいよいよ最小サンプルを動かす準備は完了です。
Pythonで画像を生成する最小サンプル
ここからは、いちばん最初に動かす テキスト・トゥ・イメージ(T2I) の最小サンプルを書きます。前章で揃えた XAI_API_KEY と openai パッケージがあればすぐに動かせます。
まずはコード全体です。OpenAI 互換クライアントを base_url だけ差し替えて使うパターンです。
import os
import base64
from pathlib import Path
from openai import OpenAI
client = OpenAI(
api_key=os.environ["XAI_API_KEY"],
base_url="https://api.x.ai/v1",
)
def generate_image(prompt: str, out_path: str = "out.png") -> Path:
response = client.images.generate(
model="grok-2-image",
prompt=prompt,
n=1,
)
image_b64 = response.data[0].b64_json
image_bytes = base64.b64decode(image_b64)
path = Path(out_path)
path.write_bytes(image_bytes)
return path
if __name__ == "__main__":
generate_image(
"a calm Japanese coffee shop at dawn, soft natural light, photo realistic",
"sample.png",
)
コードの中で押さえるべきポイントは 4 か所です。
base_url="https://api.x.ai/v1":このひと差し替えだけで OpenAI SDK が xAI を呼びにいきます。普段 OpenAI を使っている資産があれば、ここを書き換えるだけで動かせる場面が多いです。model="grok-2-image":執筆時点で T2I に使うモデル名です。モデル名は xAI の API ドキュメントに最新一覧が載っているので、本番投入する前に最新版で確認してください。n=1:同じプロンプトで何枚生成するかの指定です。n=4にすると 1 リクエストで 4 枚返ってきます。料金は枚数に比例し、1 枚あたり執筆時点で $0.02 です。b64_jsonで受け取る:レスポンスは Base64 でエンコードされた画像がresponse.data[0].b64_jsonに入ります。base64.b64decodeでバイト列に戻して.pngで保存できます。
プロンプトは英語のほうが学習データ的に安定しますが、日本語でも通ります。雰囲気を変えたいときは prompt の文言だけ書き換えて再実行してみてください。同じプロンプトでも生成のたびに違う絵になるので、まずは数回回してみると API の挙動感がつかめます。
ここまでで、コマンド一発で 1 枚画像が出力されるところまでは到達できました。次の章では、この画像を入力にして短い動画を作る I2V を扱います。
画像から動画を作るI2Vの呼び方
続いて、前章で作った画像を入力にして動画クリップを生成する I2V(Image-to-Video) を見ていきます。最初に押さえるべき大前提は、I2V は同期 API ではなく、ジョブを投げて完成を待つ非同期 API だということです。これを知らずに「結果が即返ってくる」前提でコードを書くと、必ずどこかで詰まります。
処理の流れは次の 3 ステップに分解できます。
- ジョブを投げる:画像(URL もしくは Base64)と動画の長さをサーバーに POST して、
job_idを受け取る。 - 状態を取得する(ポーリング):
job_idをキーに、数秒〜数十秒おきに状態を問い合わせる。statusがsucceededになるまで待つ。 - 完成した動画を取りに行く:成功したら返ってきた動画 URL をダウンロードして、ローカルに保存する。
コードに落とすと、こうなります。
import os
import time
import base64
import requests
from pathlib import Path
API_BASE = "https://api.x.ai/v1"
HEADERS = {
"Authorization": f"Bearer {os.environ['XAI_API_KEY']}",
"Content-Type": "application/json",
}
def start_i2v_job(image_path: str, prompt: str, duration_seconds: int = 4) -> str:
image_b64 = base64.b64encode(Path(image_path).read_bytes()).decode()
payload = {
"model": "grok-2-video",
"image_b64": image_b64,
"prompt": prompt,
"duration_seconds": duration_seconds,
}
res = requests.post(f"{API_BASE}/video/generations", json=payload, headers=HEADERS)
res.raise_for_status()
return res.json()["job_id"]
def wait_for_job(job_id: str, timeout_sec: int = 600) -> str:
deadline = time.time() + timeout_sec
while time.time() < deadline:
res = requests.get(f"{API_BASE}/video/jobs/{job_id}", headers=HEADERS)
res.raise_for_status()
body = res.json()
if body["status"] == "succeeded":
return body["video_url"]
if body["status"] == "failed":
raise RuntimeError(f"job failed: {body.get('error')}")
time.sleep(5)
raise TimeoutError(f"job {job_id} did not finish in {timeout_sec}s")
def download(url: str, out_path: str = "out.mp4") -> Path:
res = requests.get(url, stream=True)
res.raise_for_status()
path = Path(out_path)
with path.open("wb") as f:
for chunk in res.iter_content(chunk_size=1024 * 1024):
f.write(chunk)
return path
if __name__ == "__main__":
job_id = start_i2v_job("sample.png", "camera slowly pulls back", duration_seconds=4)
video_url = wait_for_job(job_id)
download(video_url, "clip.mp4")
ここでもう一段、実務で効くポイントを補足します。
duration_secondsは短く始める:動画は秒数に比例して課金されます。執筆時点で 1 秒あたり $0.05 なので、最初は 4〜6 秒で検証して、本番で必要な長さに伸ばすのが安全です。- ポーリング間隔は 3〜10 秒が目安:1 秒未満で叩くと無駄なリクエストが増え、
429(レート制限)の原因になります。動画 1 本の生成は数十秒〜数分かかるのが普通なので、5 秒間隔で十分です。 - タイムアウトは必ず設ける:
while Trueで延々と待つコードは、サーバー側障害のときに無限ループになります。timeout_secで打ち切るパターンを最初から組み込んでおきます。
非同期 API の扱いとリトライ戦略はセットで設計するのが本番運用の鉄則です。次以降の章で、料金試算とリトライ分岐を順にカバーしていきます。
料金と月額の試算方法
実装が見えてくると、次に出てくる質問は「で、月いくらかかるのか?」です。受託案件や社内 PoC で稟議に通すには、「上振れを含めて月最大いくら」という形で出せると話が早いので、ここで試算の型を一つ作っておきましょう。
執筆時点の Grok Imagine API の単価は次のとおりです。これは xAI のドキュメントに記載されている公式値で、為替や改定で動くため最新は公式ページで再確認してください。
| 項目 | 単価(執筆時点) |
|---|---|
| 画像生成(T2I) | 1 枚あたり $0.02 |
| 動画生成(I2V) | 1 秒あたり $0.05 |
この単価から、月額を出す式はシンプルです。月の 画像枚数 × $0.02 と、動画の合計秒数 × $0.05 を足すだけです。ただし本番運用では、失敗時のリトライや試行錯誤で何度か叩き直す前提を組み込まないと、実際の請求が見積もりを超えます。
例として、月 1,000 枚の画像と、4 秒の動画を 100 本作るケースを考えます。安全マージンとしてリトライ込みで 1.3 倍を見込むと、こうなります。
- 画像分:1,000 枚 × $0.02 × 1.3 = $26
- 動画分:100 本 × 4 秒 × $0.05 × 1.3 = $26
- 合計目安:約 $52/月
同じ計算を毎回手でやるのは面倒なので、ちょっとした試算スクリプトを用意しておくと稟議資料にもそのまま貼れます。
IMAGE_UNIT_USD = 0.02
VIDEO_UNIT_USD_PER_SEC = 0.05
RETRY_BUFFER = 1.3 # 失敗・再生成込みの安全マージン
def estimate_monthly_usd(images_per_month: int, video_seconds_per_month: int) -> dict:
image_cost = images_per_month * IMAGE_UNIT_USD * RETRY_BUFFER
video_cost = video_seconds_per_month * VIDEO_UNIT_USD_PER_SEC * RETRY_BUFFER
return {
"image_cost_usd": round(image_cost, 2),
"video_cost_usd": round(video_cost, 2),
"total_usd": round(image_cost + video_cost, 2),
}
print(estimate_monthly_usd(images_per_month=1000, video_seconds_per_month=400))
# => {'image_cost_usd': 26.0, 'video_cost_usd': 26.0, 'total_usd': 52.0}
稟議用に「上限」を別に出しておきたいなら、RETRY_BUFFER を 1.5 や 2.0 に切り替えたバージョンも一緒に出すと、運用上限の合意が取りやすくなります。
試算が固まれば、次は「失敗時にどう振る舞うか」を設計します。
失敗時のリトライ戦略を組み込む
実運用に乗せるうえで、リトライの設計は外せません。ポイントは「全部リトライ」でも「全部リトライしない」でもなく、エラーの種類を見て分ける ことです。ここを最初に決めておくと、二重課金や無限ループの心配が一気に減ります。
まずは判別表です。HTTP ステータスで大きく 3 グループに分けて考えます。
| ステータス | 意味 | リトライ可否 |
|---|---|---|
| 429(Too Many Requests) | レート制限。サーバー側で意図的に弾かれている | 待ってからリトライ可(exponential backoff) |
| 500 / 502 / 503 / 504 | 一時的なサーバー側エラー | 短い間隔でリトライ可 |
| 400 / 401 / 403(モデレーション拒否含む) | 入力かポリシー違反が原因 | リトライしない(同じ入力で再送しても同じ結果) |
特に注意したいのは、`400` 系のモデレーション拒否です。 自動でリトライすると、同じプロンプトを何度も叩き、課金は発生しないにせよ API 使用量だけ積み上がる典型パターンになります。
Python でこの分岐を素直に書くなら tenacity が便利です。@retry デコレータで「リトライしてよい例外」だけを宣言できるので、コードを読み返したときに意図がすぐ分かります。
import os
import requests
from tenacity import (
retry,
retry_if_exception_type,
stop_after_attempt,
wait_exponential,
)
API_BASE = "https://api.x.ai/v1"
HEADERS = {
"Authorization": f"Bearer {os.environ['XAI_API_KEY']}",
"Content-Type": "application/json",
}
class RetryableError(Exception):
"""429 / 5xx 系をまとめてリトライ対象にするための内部例外"""
class NonRetryableError(Exception):
"""4xx 系のモデレーション拒否・認証エラーなど即時失敗にする例外"""
@retry(
retry=retry_if_exception_type(RetryableError),
wait=wait_exponential(multiplier=1, min=2, max=30),
stop=stop_after_attempt(5),
reraise=True,
)
def generate_image(prompt: str) -> dict:
res = requests.post(
f"{API_BASE}/images/generations",
json={"model": "grok-2-image", "prompt": prompt, "n": 1},
headers=HEADERS,
timeout=60,
)
if res.status_code == 429 or 500 <= res.status_code < 600:
raise RetryableError(f"transient error: {res.status_code} {res.text}")
if res.status_code >= 400:
raise NonRetryableError(f"client error: {res.status_code} {res.text}")
return res.json()
動きを言葉にするとこうなります。
429か5xxが返ってきたらRetryableErrorを投げ、tenacityが指数バックオフで再試行(2 秒→4 秒→8 秒…最大 30 秒)し、最大 5 回まで粘る。4xxが返ってきたらNonRetryableErrorを投げて即時失敗。呼び出し側でログに残し、人が確認できる UI/キューに積む。- 想定外のネットワーク例外は、必要なら
requests.exceptions.RequestExceptionもRetryableError扱いに含める形で拡張できます。
リトライ設計が固まれば、あとは Grok Imagine 以外の選択肢と比べて「どれを選ぶか」という最後の編集判断です。
他のAPIとの違いと選び方
ここでは「Grok Imagine API を選ぶべきか」を、価格・I2V 仕様・SDK 互換の 3 軸で比較します。比較は事実、選択は編集判断 として分けるのが基本です。
まず、執筆時点の単価ベースでの横並びです。各社の最新価格は変動するため、本番投入前に必ず公式ページで再確認してください。
| サービス | 画像生成(T2I) | 動画生成(I2V) | SDK / 互換性 |
|---|---|---|---|
| Grok Imagine(xAI) | 1 枚 $0.02 | 1 秒 $0.05 | OpenAI 互換 SDK で叩ける |
| OpenAI Images(gpt-image-1) | 1 枚 $0.04(標準) | 単体 I2V API なし | 公式 openai SDK |
| Runway Gen-3 | 画像中心の API ではない | 1 秒 $0.05〜$0.10 帯 | 独自 SDK(OpenAI 非互換) |
この数値からは、画像単体では Grok Imagine が約半額、I2V の下限価格は Grok と Runway がほぼ同等、OpenAI SDK 資産との親和性は Grok Imagine が最も高い、という 3 点が読み取れます。
ここからは編集判断です。大量バッチで画像を回す用途(動的 OGP・商品画像のバリエーション生成など)では、1 枚あたりの差額がそのまま利益に効くため Grok Imagine が向きます。既存の OpenAI SDK ベースのコードに後から画像生成を足したい場合 も、base_url の差し替えで済むぶん追加学習コストが小さく済みます。
一方、長尺・高品質の動画や特定のフィルム調表現を再現したい場合は、Runway 系のほうがコミュニティの作例が多く、ノウハウを引きやすい場面があります。原価だけでなく 「自分のユースケースで再現したい品質が取りやすいか」 までを含めて比較すると、判断を誤りにくくなります。
選定が固まれば、最後に運用面の関門である利用規約を確認しておきましょう。
商用利用と利用規約の注意点
実装と試算の話が片付いたら、最後に確認しておくべきは 利用規約まわりの取り扱い です。技術的に動くことと、業務で配信していいことは別物なので、ここを飛ばさずに見ておきます。なお、規約は更新されるため、本番投入前に必ず最新の公式 TOS を確認してください。
まず、執筆時点の xAI API 利用規約から押さえておきたいポイントを 3 つに整理します。
- 商用利用は基本的に可:API 経由で生成した画像・動画は、商用プロジェクトに使えるかたちで提供されています。社内ツール、自社サービス、SNS への投稿など、一般的なビジネス用途は問題なく許容範囲です。
- モデレーションポリシー違反のコンテンツは生成不可:暴力・性的・差別的なコンテンツや、実在人物の悪意あるディープフェイクなどは規約違反です。違反が繰り返されるとアカウント自体が停止されるリスクがあるため、生成プロンプトを内部でフィルタリングする仕組みを入れておくと安全です。
- 第三者への「再販」は別途確認が必要:自社サービスの一部として API 出力を組み込むのと、API 出力そのものを「画像販売サービス」として転売するのは、別の話として扱われることが多いです。受託案件で「クライアント名義で配信する」ような構造を組む場合は、再販条項に該当しないかを契約前にチェックしてください。
運用に乗せた後の話としては、定期的に最新の利用規約を確認するワークフローを組んでおくと安心です。API の単価と同じく、規約も静的なものではないので、四半期ごとに見直す程度のリズムでチェックすると見逃しが減ります。
ここまでで、Grok Imagine API を Python から使ううえで押さえるべき範囲はひととおりカバーできました。次は読者からよく出る質問を整理していきます。
よくある質問(FAQ)
- QGrok Imagine APIは個人開発でも商用利用できますか?
- A
執筆時点の利用規約上、個人開発であってもアカウントを正規に作成し API 経由で生成したコンテンツであれば、商用利用は基本的に認められています。ただしモデレーションポリシー違反となるコンテンツ生成は禁止されており、第三者向けに「API 出力そのものを販売する」ような構造は別途確認が必要です。詳しい線引きは前章の利用規約パートを確認してください。
- Qリクエストが失敗した時にも料金は発生しますか?
- A
公式に明示されているわけではありませんが、一般的に成功レスポンス(HTTP 200)に対してのみ画像・動画の単価が発生する設計が標準です。一方で、モデレーション拒否などのエラーレスポンスでも内部処理が走っているため、過度なリトライは API 使用量を押し上げます。前章のとおり、リトライしてよいエラーとそうでないエラーを区別する設計にしておくのが安全です。
- QPython以外の言語からGrok Imagine APIを叩くことはできますか?
- A
もちろん可能です。Grok Imagine API は REST ベースなので、HTTP クライアントが書ける言語であれば JavaScript / TypeScript、Go、Ruby、PHP などからも同じように呼び出せます。本記事では学習コストの低さから Python を中心にしましたが、サンプルの中身はエンドポイント・認証ヘッダ・JSON ボディの組み合わせなので、他言語への移植も難しくありません。
- QRate limit(レート制限)を引き上げるにはどうすればいいですか?
- A
Rate limit は xAI のアカウントごとに tier 制で管理されており、利用実績や決済情報に応じて段階的に引き上げられる仕組みです。短期的に大量のリクエストが必要な場合は、xAI のサポート窓口またはコンソール上のサポートリクエストから tier 昇格を申請する流れになります。tier の最新値や昇格条件は公式ドキュメントの Rate Limits ページで確認するのが確実です。
まとめ
ここまで、Grok Imagine API を Python から使うために押さえるべき範囲を一気に確認してきました。
振り返ると、以下の流れでひととおり実装と運用の判断ができる状態になっています。
- API キーの取得と OpenAI 互換クライアントでの最小サンプル(T2I)
- 非同期ジョブで進める I2V の 3 ステップ(投入・ポーリング・ダウンロード)
- 1 画像 $0.02 / 1 秒 $0.05 の単価と、リトライ込みの月額試算
- 429・5xx・4xx を分けたリトライ戦略(
tenacityでのデコレータ実装) - 競合 API との価格・SDK 互換の比較と、商用利用・再販条項の確認
次に手を動かすとしたら、まずは前章までで紹介した最小サンプル 1 本を自分のアプリに組み込み、月数十ドル程度のクレジット枠で社内 PoC を回してみるのが現実的です。「動かしてみる → 試算スクリプトで月額を出す → 稟議に出す」 という順で進めると、上司やクライアントとの合意も取りやすくなります。
最後に注意点として、API の単価・rate limit・利用規約は更新される前提のため、本番運用に乗せる前に必ず公式ドキュメントで最新値を再確認してください。本記事の数値はあくまで執筆時点のスナップショットで、運用の検算用ベースラインとして活用してもらえれば十分です。
実際に稼いでいる人の画像生成AIのスキルと収益化方法を知っていますか?
romptn ai が開催する完全無料のAIクリエイターセミナーでは、現場で活躍するプロから下記のような内容を学べます。
- ゼロから画像生成AIで収益化を達成するための具体的なロードマップ
- 実績のある講師が実践する初心者を脱出するための必須スキルと最新ツール
- Nano Banana や Grokなどスマホからでもできる本格的な画像生成AI活用方法
- 広告画像や映像など実際の制作過程をイメージするための講師によるライブデモ
2時間のオンラインセミナーで、ただ画像生成AIや動画生成AIの上級スキルや最新ツールを知るだけでなく、実際に収益化を達成する一歩を踏み出すための必須知識を学ぶことができます。
- 大手企業6社と契約実績(TOYOTA, mercari, 伊藤園 等)
- AI映画制作3本、WORLD AI FILM FESTIVAL 2026 in KYOTO にて2冠達成
- Best AI Anime 受賞
- Japan Best AI Film(グランプリ)受賞(応募431作品中)
- 経歴:元WEBデザイナー・マーケター → 2023年に生成AIと出会い転身 → プロのAIクリエイターへ


