画像 API
MuskAPI は OpenAI 互換の画像生成・編集 API を提供します。先に API Key を作成し、その Key のグループで画像生成が許可され、対象モデルが利用可能であることを確認してください。
画像生成はテキストリクエストより時間がかかります。本番環境では HTTP タイムアウトを 2 分以上に設定し、同時実行数を制限してください。
Base URL と認証
「ユーザーセンター - API キー」から Base URL をコピーします。すべてのリクエストで Bearer API Key を使用します。
BASE_URL="ユーザーセンターからコピーした Base URL"
API_KEY="YOUR_MUSKAI_API_KEY"
最初にプロバイダー形式を選択
3 種類のプロバイダーは同じリクエスト形式ではありません。model だけを置き換えて同じ本文を送信しないでください。
| プロバイダー | 主なモデル | API 形式 |
|---|---|---|
| GPT-Image-2 | gpt-image-2 | OpenAI Images。生成は JSON、編集は multipart。 |
| OpenAI 互換 Nano Banana | nano-banana-2、nano-banana-pro | OpenAI Images。aspect_ratio と resolution=1k/2k/4k を使用し、GPT Image の quality やピクセル size は送信しません。 |
| Grok | grok-imagine-image、grok-imagine-image-quality | aspect_ratio を使う OpenAI 互換 Images。参照画像は JSON image_urls。 |
| Gemini(Nano Banana / NoBanana) | gemini-3.1-flash-image-preview、gemini-3-pro-image-preview | /v1beta/models/{model}:generateContent と Gemini ネイティブ形式。 |
利用可能なモデルはグループと上流の状態により変わります。実装前にモデル一覧で正確なモデル ID と画像能力を確認してください。
nano-banana-2/nano-banana-proは OpenAI Images 互換モデルです。後述の Gemini ネイティブ Nano Banana とは API 形式が異なります。
GPT-Image-2
画像生成
POST /v1/images/generations
curl "$BASE_URL/v1/images/generations" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "宇宙服を着たオレンジ色の猫が木星の上を漂う、映画的な光",
"size": "1024x1024",
"quality": "medium",
"n": 1,
"response_format": "b64_json"
}'
| パラメータ | 説明 |
|---|---|
model | 画像モデル ID。現在利用可能なモデルはコンソールで確認してください。 |
prompt | 主体、構図、画風、光、文字要件などを記述します。 |
size | モデルと上流チャネルが対応するサイズまたはサイズ区分。 |
quality | 一般的な値は low、medium、high。一部モデルは auto に対応します。 |
n | 生成枚数。実際の画像枚数に基づいて課金・クォータ計算されます。 |
response_format | Base64 を受け取る場合は b64_json。一部上流は一時的な url を返すため、両方に対応してください。 |
画像編集・参照画像
POST /v1/images/edits
multipart/form-data で送信し、Content-Type の boundary は HTTP クライアントに生成させてください。
curl "$BASE_URL/v1/images/edits" \
-H "Authorization: Bearer $API_KEY" \
-F 'model=gpt-image-2' \
-F 'prompt=人物のポーズを保ち、背景を雨のネオン都市に変更する' \
-F 'size=1024x1024' \
-F 'quality=medium' \
-F 'response_format=b64_json' \
-F 'image=@./reference.png;type=image/png'
複数参照画像、マスク、透明背景、対応サイズはモデルと上流チャネルによって異なります。参照画像 1 枚は 20 MB 未満にしてください。
multipart の Content-Type は手動設定せず、HTTP クライアントに boundary を生成させてください。ゲートウェイは最大 4 件の参照 URL/アップロードを受け付けますが、上流の上限はそれより少ない場合があります。
OpenAI 互換 Nano Banana
POST /v1/images/generations を使用し、画幅と解像度区分を指定します。
curl "$BASE_URL/v1/images/generations" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana-2",
"prompt": "鮮明な建築ディテールを持つ映画的な夜のネオン都市",
"aspect_ratio": "16:9",
"resolution": "2k",
"n": 1,
"response_format": "b64_json"
}'
Pro 版は model を nano-banana-pro に変更します。一般的な区分は 1k、2k、4k です。成功時は data[0].b64_json または data[0].url を読み取り、一時 URL はすぐに保存してください。どちらもない HTTP 200 は成功として扱わないでください。
Grok
高速モデルは grok-imagine-image、品質モデルは grok-imagine-image-quality です。Grok では size ではなく aspect_ratio を使用します。
curl "$BASE_URL/v1/images/generations" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-image",
"prompt": "雨の未来都市にあるラーメン店、ドキュメンタリー写真",
"aspect_ratio": "16:9",
"response_format": "b64_json"
}'
参照画像編集では、公開 HTTPS URL または data:image/...;base64,... を JSON の image_urls に入れます。
curl "$BASE_URL/v1/images/edits" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-image-quality",
"prompt": "主体を維持し、背景を雪山の日の出に変更する",
"aspect_ratio": "16:9",
"image_urls": ["https://example.com/reference.png"],
"response_format": "b64_json"
}'
現在のモデル一覧には 1:1、16:9、9:16、4:3、3:4、3:2、2:3 などがあります。高品質が必要な場合は品質モデルを選び、quality=high だけで高速モデルが品質モデルへ切り替わるとは想定しないでください。
Gemini(Nano Banana / NoBanana)
Gemini 画像モデルは OpenAI Images 本文ではなく Gemini ネイティブ形式を使用します。
GEMINI_MODEL="gemini-3.1-flash-image-preview"
curl "$BASE_URL/v1beta/models/$GEMINI_MODEL:generateContent" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"parts": [{"text": "柔らかなサイドライトを使ったミニマルな香水広告"}]}],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {"aspectRatio": "4:5", "imageSize": "2K"}
}
}'
参照画像はテキストと同じ parts に追加します。inlineData.data には data:image/...;base64, を除いた純粋な Base64 を入れます。
{
"contents": [{"parts": [
{"text": "形を維持し、背景を濃紺の星空に変更する"},
{"inlineData": {"mimeType": "image/png", "data": "BASE64_WITHOUT_PREFIX"}}
]}],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {"aspectRatio": "1:1", "imageSize": "2K"}
}
}
画像はすべての candidates[].content.parts[].inlineData.data を走査して取得し、形式は inlineData.mimeType を使います。互換実装向けに inline_data / mime_type にも対応できます。HTTP 200 でも画像 part がなければ生成成功として扱わないでください。
レスポンス処理
- GPT-Image-2 / Grok:
dataを走査し、b64_jsonまたは一時urlを取得して直ちに保存します。 - Gemini:最初の part だけでなく、すべての candidate part を確認します。
- Base64 用にレスポンスサイズ上限を引き上げ、画像 Base64 全体を通常ログへ記録しないでください。
- タイムアウトは 120 秒以上にし、タイムアウト後の無制限再試行による重複生成・重複課金を避けてください。
非同期画像タスク
上流が非同期タスクに対応している場合、POST /v1/images/tasks で作成できます。
curl "$BASE_URL/v1/images/tasks" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-image-2","prompt":"ミニマルな山のカフェのポスター","size":"1024x1024","quality":"medium","n":1}'
レスポンスの task_id(上流によっては id)を取得して照会します。
curl "$BASE_URL/v1/images/tasks/TASK_ID" \
-H "Authorization: Bearer $API_KEY"
- この API は上流の非同期タスク API を透過的に中継するもので、MuskAPI 独自の永続ジョブキューではありません。
- 作成時と同じ API Key・グループで照会してください。タスクと上流アカウントの関連付けは現在最大 24 時間保持されます。期限切れ、または元のアカウントが利用不能な場合は照会できないことがあります。
- 2~5 秒間隔で状態を確認し、完了後はすぐに画像をダウンロードしてください。
- すべてのプロバイダーが task API に対応するとは限りません。Gemini
generateContentと通常の Grok Images は、チャネルが task 対応を明示しない限り同期レスポンスとして扱ってください。
画像の保存と履歴
Web の画像生成ページにある最近の画像と待機キューは、ブラウザ内にベストエフォートで保存されます。IndexedDB を優先し、失敗時は localStorage にフォールバックします。
- ブラウザ、端末、サービスノード間では同期されません。
- プライベートブラウズ、容量不足、サイトデータの削除、書き込み失敗により履歴が消えることがあります。
- 旧サーバー側ギャラリーは各ノードのローカルディスクを使用しており、複数ノード環境で共有ストレージの整合性を保証しません。クラウド保存として利用しないでください。
- 現在、画像の OSS 保存、保存期間設定、自動ライフサイクル削除、ユーザー向け OSS 容量・通信料金の課金には対応していません。
生成に成功した画像は直ちにダウンロードし、別途バックアップしてください。 ブラウザ履歴、一時 URL、旧サーバーギャラリーを長期保存先として利用しないでください。
よくあるエラー
Image generation is not enabled for this group
画像生成が許可されたグループの API Key を使用するか、管理者に設定変更を依頼してください。
対応アカウントがない、またはモデルが見つからない
指定したモデル、サイズ、品質、API に対応する上流チャネルが現在ありません。モデル ID を確認するか、サイズ・品質を下げて再試行してください。
パラメータエラー、または HTTP 200 なのに画像がない
プロバイダー形式の混在を確認してください。GPT 編集は multipart、Grok は aspect_ratio と JSON image_urls、Gemini は contents / generationConfig と inlineData を使用します。画幅・解像度がモデル一覧の現在の能力に含まれることも確認してください。
成功した画像が Web 履歴に表示されない
ブラウザ保存は永続ストレージではありません。レスポンスの b64_json または url から直接保存してください。ページを閉じた後やブラウザデータ削除後の復元は保証されません。