Skip to main content

現象

Nano Bananaモデル(gemini-3.1-flash-image-preview、gemini-3-pro-image-preview、gemini-nano-banana-2.1など)を参照画像付きの画像編集で呼び出すと、APIは次の2つのエラーのいずれかと共にHTTP 400を返します:
このエラーは通常、短時間に集中して発生した後に収まるため、APIが不安定であるように見えます。

原因

リクエスト内のinlineData.dataが空であるため、プロバイダーは画像を受信できていません。 どちらのエラーも原因は同じですが、ノードによって表現が異なります。一方はinlineDataパラメータが空であると表示します。もう一方は「unable to process input image」と表示されるため、画像が破損しているか、リンクにアクセスできないと考えられがちです。
これは画像のURLや、ストレージバケットが公開されているかどうかには関係ありません。 inlineDataでは、画像はリクエストボディ内にbase64として送信されるため、プロバイダーがリンクを取得しにいくことはありません。このエラーは、base64文字列自体が空であることを意味しています。問題は、コード内で画像をbase64に変換する処理の段階にあります。
これはコンソールのログで確認できます。失敗したリクエストは入力tokensがごくわずか(promptのみ)ですが、画像を含む通常のリクエストには数百から数千tokens以上多く含まれています。

チェックリスト

1

ダウンロードまたはエンコードのステップは実際に成功していますか?

多くのプログラムでは、まずオブジェクトストレージ(COS / OSS / S3)から画像をダウンロードし、それを base64 に変換します。ダウンロードが失敗またはタイムアウトしたり、非同期ステップが完了する前にリクエストが送信されたりすると、空の文字列になってしまいます。送信直前に base64 の長さをログに出力してください。
2

変数が undefined になっていませんか?

JavaScript では、JSON.stringify は値が undefined であるフィールドを暗黙的に除外します。もし imageBase64 が undefined の場合、シリアライズされたリクエストの inlineData 配下には mimeType のみが含まれ、data フィールドは一切存在しなくなるため、プロバイダーから inlineData が空であると報告されます。これはコード上では確認できないため、実際に送信されたリクエストボディをログに出力して確認する必要があります。
3

data に data URL プレフィックスが含まれていませんか?

inlineData.data にはプレーンな base64 のみを含める必要があります。完全な data:image/png;base64,iVBORw0... 文字列がある場合は、カンマを含むそれ以前の部分をすべて削除してください。
4

mimeType は実際の画像フォーマットと一致していますか?

実際のフォーマットに合わせて、mimeType を image/png、image/jpeg、または image/webp に設定してください。ファイル拡張子は信頼できません(スマートフォンの一部の .jpg ファイルは実際にはマルチフレーム画像です)。最も安全な方法は、変換時にすべて PNG または JPEG として再エンコードすることです。

送信前の検証

リクエスト作成前に数行のチェックを追加することで、APIエラーとしてではなくローカルで問題を検出できます:
この400エラーはリクエスト自体に起因するため、同じリクエストを再試行しても成功しません。コードを修正すれば、プラットフォーム側の設定変更は不要です。

代わりに画像のURLを渡したい場合

ネイティブのGeminiエンドポイントは、画像の直接リンクも受け付けています。fileDataを使用し、inlineDataは使用しないでください:
URLを使用する場合、Googleのサーバーが画像をダウンロードする必要があります。ストレージが中国本土のCDN(例えば、デフォルト設定のTencent Cloud COSなど)経由でのみ配信されている場合、Googleがアクセスできないことがよくあります。その際によく見られる症状は、エラーが発生するのではなく、生成結果で参照画像が無視されるというものです。可能な限り、base64の方がより確実な選択肢です。詳細については、Nano Banana開発者ガイドを参照してください。

よくある質問

inlineData では、プロバイダーがいかなるリンクも取得しないため、パブリックアクセスの可否は関係ありません。コードで画像を base64 に変換するステップを確認し、送信している data フィールドが空になっていないか確認してください。
いいえ、課金されません。リクエストはプロバイダーのエントリーポイントで拒否され、画像は生成されないため、料金は発生しません。コンソールの呼び出しログが正式な記録となります。

関連ドキュメント

Nano Banana 開発者ガイド

入力画像の要件、URL入力、タイムアウトについて

Gemini 画像エラー処理

各エラーおよび finishReason の処理方法

画像の MIME タイプ不一致?

画像 URL 内の処理パラメータに起因するフォーマットの不一致

画像の圧縮と解像度

参照画像を圧縮しても出力品質は低下しません