GPT Image 2.6でループGIFを作るには?保存から動きの確認まで

GPT Image 2.6のGIF生成リクエストを組み立て、ファイルを保存し、フレーム数と再生時間を確認する手順。非対応パラメータやループのずれも切り分けます。

円形の帯に描かれたオレンジ色の鳥の動きを繰り返すゾートロープ

GPT Image 2.6は、Images APIの画像生成エンドポイントからアニメーションGIFを出力できます。 output_format: "gif"を指定し、最後に最初の姿勢へ戻る短い動作を指示して、返されたデータをファイルに保存します。ただし、リクエストの成功だけでは完成とはいえません。複数のフレームが実際に動くか、再生速度が適切か、最後から最初へ自然につながるかを確認します。

本記事は2026年11月5日時点のOpenAI公式画像生成ドキュメントに基づいています。以下は文書に沿ったリクエスト例であり、Ofoxが有料のモデル呼び出しで実測した結果ではありません。付属のファイル確認ツールは合成テストデータでローカル検証していますが、それによって生成品質やAPIへのアクセスを確認したわけではありません。確認時点ではOfoxの公開カタログと使用アカウントのモデル一覧にImage 2.6が掲載されていなかったため、例はOfoxゲートウェイではなく、OpenAI APIへの直接接続を使います。

最初は一つの動作と明確な終わり方を指定する

最初の確認には、複雑な商品CMよりも短いループイラストが向いています。被写体は一つ、カメラは固定し、元に戻れる動作を一つだけ指定します。初回は文字や細かな商品ラベルを避けると、確認すべき要素を絞れます。

ここで用意した例は、オレンジ色の鳥が翼を上げ、元の姿勢に戻るというものです。次の英文は独自に作成したリクエスト用テンプレートであり、生成済みの作品を説明したものではありません。ダウンロード用JSONと同じ指示を使えるよう、英文のまま掲載します。

Create a looping animation of a small orange bird on a stationary branch
against a plain cream background. The bird raises its wings, pauses, then
lowers them to its starting pose. Keep the camera fixed, the branch still,
and the bird shape and colors consistent. No text. Make the transition
back to the start smooth.

ブランドキャラクターを使う場合は、利用権限のある素材を選び、色、輪郭、付属品、体の比率などを具体的な確認項目にします。「一貫性を保つ」と指示したこと自体は、実際に保たれた証拠にはなりません。また、このテキストからGIFを作る手順を、既存の写真をアップロードして動かす方法の実測として扱わないでください。

エンドポイントに合ったパラメータを選ぶ

パラメータ文書に記載された範囲・動作最初の例
model2.6 FlareまたはSunburstgpt-image-2.6-flare
output_format画像生成エンドポイントでgifを指定gif
frame_count2~64、既定値は99
frame_duration_ms1フレーム20~2000ミリ秒、10ミリ秒単位に丸められる。既定値は200200
sizeauto、または16の倍数でモデルの制限に適合する寸法auto
n出力数。リクエスト全体の制限が適用される1

9フレームを各200ミリ秒で再生すると、指定上の1周の長さは9 × 200 / 1,000 = 1.8秒です。これは再生時間であり、生成にかかる時間ではありません。実際のファイルが指定どおりかどうかは、返された結果で確認します。

フレームの寸法、フレーム数、出力数は、モデルのサイズ制限とリクエスト全体のピクセル数上限に収める必要があります。幅と高さが16の倍数という条件だけでは、有効なリクエストとは限りません。まずautoを使い、サイズやピクセル数に関するエラーが出たら、同じリクエストを繰り返さず、寸法、フレーム数、出力数を減らして見直します。

GIFのリクエストには、stream、途中画像の出力設定、output_compression、prompt_rewriterを追加しないでください。現行ガイドでは、GIF出力はこれらに対応していません。また、画像編集エンドポイントからGIFは出力できません。既存の静止画用リクエストを流用するときは、こうした違いに注意します。

一度だけリクエストし、レスポンスを保存する

必要なのは、アクセス権限と請求設定のあるOpenAI APIキー、Python 3、curlです。ChatGPTの画面で使えるかどうかと、APIプロジェクトから使えるかどうかは別に確認します。生成前に料金と接続方法のガイド(英語)を読み、静止画の見積もりとGIFの請求額を区別してください。

付属ZIPには、完全なgif-request.json、SVGのリクエスト例、ローカル確認用スクリプトが入っています。以前の結果を上書きしないよう、新しいフォルダーに展開して作業します。シェルのOPENAI_API_KEYにキーを安全に設定し、その値をJSONへ書いたり、Gitにコミットしたりしないでください。

curl --fail-with-body --max-time 240 \
  https://api.openai.com/v1/images/generations \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary @gif-request.json \
  --output gif-response.json

付属JSONでは鳥のプロンプトに加え、quality: "low"、complexity: "low"、size: "auto"、GIFを1個、9フレーム、1フレーム200ミリ秒を指定しています。評価を始めるための設定であり、最適な組み合わせとして実証したものではありません。OpenAIはFlareを速度重視、Sunburstを細部の作り込みに向くモデルと説明していますが、品質を判断するには自分の用途で比較する必要があります。

curlが失敗した場合は、まず保存されたエラーレスポンスを読みます。手元でタイムアウトしたからといって、サーバー側で何も処理されなかったとは限りません。再び有料リクエストを送る前に、リクエストの状態とアカウントの利用履歴を確認してください。

成功したレスポンスは、次のコマンドでデコードします。

python3 decode_image.py gif-response.json bird.gif

付属ツールはdata[0].b64_jsonを読み、Base64の形式とGIFのファイル識別子を確認します。同名の出力が存在する場合は上書きせず停止し、返された使用量があれば表示します。Base64のフィールドが見つからない場合はレスポンス構造を調べる必要があります。任意のデータの拡張子を.gifに変更しても、GIFにはなりません。

公開前にフレームと動きを確認する

仮想環境にPillowをインストールし、付属の確認スクリプトを実行します。

python3 -m venv .venv
source .venv/bin/activate
python -m pip install Pillow
python inspect_gif.py bird.gif

スクリプトは寸法、フレーム数、各フレームの表示時間、合計再生時間、ループ設定を出力します。Pillowでは、GIFのループ値が0なら無限繰り返しを意味します。値がないことは、ループ再生される証拠にはなりません。GIFの識別子が正しくても、1フレームしかなければ、動く画像という要件は満たしません。

最初と最後のデコード済みフレームについて、RGB値の平均絶対差も計算します。これは調査用の指標であり、品質スコアや合格基準ではありません。 最初と最後がほぼ同じでも、途中で動きが飛ぶ場合があります。逆に、次のフレームが次周の先頭につながるため、滑らかなループでも最初と最後が完全一致するとは限りません。

GIFをブラウザーで開き、数周続けて見てください。枝やカメラが意図せず動かないか、鳥の形が変わらないか、翼が指定した姿勢まで動くか、周回の境目で飛ばないかを確認します。拡大表示だけでなく、実際に使う表示サイズでも確認します。掲載先がアニメーションGIFに対応するか、ファイル容量が適切かも確認してください。サービスによっては、アップロード時に静止画化、再圧縮、形式変換が行われます。

参考として、OpenAIはランタンを持つキャラクターのGIF例を公開しています。これはOpenAIの作例であり、上記の鳥の生成結果でも、OfoxゲートウェイがGIFに対応する証拠でもありません。今回の記事には、当方が実際に生成した2.6の作例はありません。

問題を切り分け、一度に一つだけ変える

症状最初に確認すること次に試すこと
出力形式が拒否されるエンドポイントと正確なモデルID文書にある画像生成エンドポイントを使い、アカウントのアクセス権限を確認する
パラメータ検証エラー静止画用リクエストから残った追加設定GIF非対応の設定を外し、最小のリクエストに戻す
ピクセル数上限のエラーフレーム数、寸法、nの組み合わせ処理量を減らす。再生時間だけ変えれば直るとは考えない
ダウンロードした画像が動かない元ファイルのフレーム数と掲載先の動作アップロードや生成が原因と決める前に元ファイルを調べる
ループの境目で飛ぶ最後の姿勢、カメラ、途中のフレーム元に戻れる動作を一つに絞り、背景とカメラを固定する
被写体の形が変わる動作や見た目の条件が多すぎないか指示を単純にして、新しい結果と比較する
401、429、タイムアウト認証情報、アカウントの上限、レスポンスの詳細原因を調べ、回数無制限の自動再試行を避ける

これは文書から整理した確認手順であり、すべてのエラーを当方が再現したという意味ではありません。元の出力を残し、どの設定を変えたか記録します。プロンプトだけで完全なループを保証することはできません。

合格したGIFを引き渡す

元のGIF、機密情報を除いたリクエスト、返された使用量、実際の請求額、簡単な確認メモを残します。単に「生成成功」とするより、「9フレーム、実際の表示サイズで確認、カメラの移動は目視で見られず、掲載先でもループ確認済み」と書く方が、何を確認したか伝わります。もちろん、実際に確かめた項目だけを記録してください。

動きではなく編集可能な図形が必要なら、Image 2.6のSVGガイドを参照してください。長めの商品動画には、別の成果物を扱う商品写真から絵コンテを作る手順(英語)があります。短いGIFを、編集まで済ませた動画広告と同じものとして説明しないようにします。

Ofox経由で使う場合は、まず現行のモデル文書とレート制限ガイドを確認してください。本記事は、このリクエストをOfox Chatへ貼り付ければImage 2.6が選ばれ、GIFが返されると保証するものではありません。