GPT Image 2.6 GIF API:PythonでGIFアニメを作る手順と上限・料金
GPT Image 2.6のAPIはoutput_formatの「gif」指定でGIFアニメを返します。フレームは16以下が安全、512×512・9フレームで約$0.062です。
目次

2026年11月4日に公開されたGPT Image 2.6のAPIでGIFアニメを作るには、POST /v1/images/generationsのリクエストにoutput_format: "gif"を加え、フレーム数をframe_count、1フレームの表示時間をframe_duration_msで指定します。モデルはgpt-image-2.6-flareかgpt-image-2.6-sunburstです。返ってきたb64_jsonをbase64デコードして.gifで保存すれば、無限ループ指定のGIFになります。sizeはアニメ全体ではなく、1フレームの大きさです。
値を決めるうえで先に知っておきたいのは、フレーム数の上限です。OpenAIの画像生成ガイドは2〜64、APIリファレンスは2〜16と書いていて食い違っているため、OpenAIのAPIで確実に動かすコードは16フレーム以下にしておくのが安全です。費用はトークン課金で、512×512・9フレーム・quality: "medium"のGIFは出力2,073トークン、約$0.062でした(LaoZhang APIのドキュメントチームが2026年11月5日にOpenAIへ直接送った計測)。1024×1024以上を定額で作りたい場合は、LaoZhang APIのgpt-image-2.6-web(1回$0.03)も選べますが、こちらは1フレームが655,360ピクセル以上(正方形なら816×816以上)でないと受け付けません。
注記:laozhang.ai は当ブログ運営チームの自社サービスです。その料金は中立的な比較ではなく、自社の提示価格です。
例外が2つあります。OpenAIの画像生成ガイドでは、GIFを返すのは生成エンドポイントだけで、編集エンドポイントはGIFに対応していません。また、プロンプトで「元のポーズに戻る」と指示しても、ループのつなぎ目が滑らかになるとは限りません。2026年11月5日の実測(1024×1024)では、OpenAIの例文どおりに作った9フレームのGIFが、最後のフレームから最初に戻るところで目に見えて跳びました。つなぎ目は公開前に数値で確かめられます。
PythonでGIFを保存するまで:output_formatに"gif"を指定する
必要なのはopenaiとPillowの2つのパッケージと、GPT Image 2.6を呼べるAPIキーです。OpenAIのAPIリファレンスはframe_countの説明に「選んだモデルのGIFプレビューへのアクセスが必要」と書いており、どの組織が対象かは公開情報に記載がありません。自分のキーで通らない場合は、後述の経路の選択肢も参考にしてください。
pip install openai pillowを実行し、APIキーを環境変数OPENAI_API_KEYに設定します。- 下のコードで
images.generateにoutput_format="gif"とframe_count、frame_duration_msを渡します。 result.data[0].b64_jsonをbase64デコードし、拡張子.gifで保存します。- 保存したファイルのフレーム数・表示時間・ループ指定を、後半の確認スクリプトで確かめます。
import base64
from openai import OpenAI
client = OpenAI() # LaoZhang APIを使う場合は base_url と api_key を指定
result = client.images.generate(
model="gpt-image-2.6-flare",
prompt=(
"A little monkey in an olive-green hooded coat stands in a snowy pine forest at dusk. "
"The monkey holds a glowing amber paper lantern at chest height, slowly lifts it, "
"looks up and blinks, then lowers it back to its starting pose. "
"Keep the lantern in its hands and the camera still. Make the motion loop smoothly."
),
size="512x512", # 1フレームの大きさ
quality="medium",
output_format="gif",
extra_body={
"frame_count": 9, # フレーム数
"frame_duration_ms": 200, # 1フレームの表示時間(ミリ秒)
},
)
with open("loop.gif", "wb") as f:
f.write(base64.b64decode(result.data[0].b64_json))
print(result.usage) # 出力トークン数。費用の計算に使うframe_countとframe_duration_msをextra_bodyに入れているのは、SDKのバージョンによってはこの2つを引数として受け付けず、unexpected keyword argumentで止まるためです。extra_bodyに入れた項目はそのままリクエスト本文に追加されるので、SDKの版に関係なく送れます。使っているSDKのバージョンのimages.generateにframe_countが引数として載っていない限り、extra_bodyで渡しておくのが確実です。この例の9フレーム×200ミリ秒は、ループ1周が1.8秒になる設定で、OpenAIのガイドにある作例と同じ値です。
frame_count・frame_duration_ms・sizeに指定できる範囲
GIF専用のパラメータはframe_count(既定9)とframe_duration_ms(既定200ミリ秒)の2つで、ループ1周の長さはこの2つの掛け算で決まります。sizeは1フレームの幅×高さで、フレーム数、フレームの大きさ、n(作るアニメの数)の合計が、モデルのサイズ上限とリクエスト全体のピクセル予算に収まる必要があります。超えた場合は、フレーム数、サイズ、nのどれかを減らすようOpenAIの画像生成ガイド(GIF出力の節)は案内しています。2026年11月5日時点の各文書の記載は次のとおりです。
| パラメータ | OpenAIの画像生成ガイド | OpenAIのAPIリファレンス | LaoZhang APIのweb経路 |
|---|---|---|---|
frame_count | 2〜64、既定9 | 2〜16、既定9 | 2〜64、既定9 |
frame_duration_ms | 20〜2000ミリ秒、10ミリ秒単位に丸め、既定200 | 最小20、既定200、2000の上限は記載なし | 20〜2000、既定200 |
size | autoか、16の倍数の幅x高さ | モデルのGIFサイズ上限を満たすこと | 655,360ピクセル以上(正方形なら816x816から)、省略不可 |
n | フレーム数・サイズと合わせてピクセル予算内 | 記載なし | 1のみ |
| GIFで使えない機能 | ストリーミング、部分画像、output_compression、prompt_rewriter | ストリーミング、部分画像、マスク、output_compression | stream: trueでも完成後に一括で返る |
注記:laozhang.ai は当ブログ運営チームの自社サービスです。その料金は中立的な比較ではなく、自社の提示価格です。
web経路でsizeを省略すると、439×390のような小さく半端なサイズで返ってくることがLaoZhang APIのドキュメントに記載されています。どの経路でもsizeは明示しておくほうが、結果のサイズを予測できます。
フレームは64まで?16まで?公式文書の食い違い
OpenAIの公式文書どうしで、フレーム数の上限が4倍違います。画像生成ガイドはframe_countを2〜64としていますが、OpenAIのAPIリファレンス(images.generate)は「2から16までの整数」と書き、maximum: 16を明記しています。17フレーム以上がOpenAI本体のAPIで通ることを示した公開の計測はありません。LaoZhang APIのドキュメントチームがOpenAIに直接送ったGIFも9フレームまでです。そのため、OpenAIのAPIで確実に動かす必要があるコードは16フレーム以下に収め、17フレーム以上はエラーになる前提で扱うのが無難です。
注記:laozhang.ai は当ブログ運営チームの自社サービスです。その料金は中立的な比較ではなく、自社の提示価格です。
LaoZhang APIのweb経路は2〜64を受け付けると記載しており、2026年11月5日に65フレームを送ると400で拒否されました。この日にweb経路で実際に作った最大は16フレームです。ChatGPTアプリのGIF機能にある0.25×〜2×の速度メニューはアプリ側の機能で、APIではframe_duration_msで表示時間を決めます。コードを書かずに作る方法はChatGPTでGIFアニメを作成する方法を参照してください。
実際に作ったGIFのフレーム数・容量・生成時間(2026年11月5日)
2026年11月5日にLaoZhang APIのgpt-image-2.6-webで1024×1024のGIFを4本作ったところ、4本ともフレーム数と1フレームの表示時間は指定どおりで、ループ指定は0(無限ループ)でした。ファイルサイズはフレーム数にほぼ比例し、1フレームあたり約0.5MBです。生成時間は43.5〜52.1秒で、この日は16フレームでも9フレームと変わりませんでした。
注記:laozhang.ai は当ブログ運営チームの自社サービスです。その料金は中立的な比較ではなく、自社の提示価格です。
| 作り方 | フレーム×表示時間 | 1フレームの大きさ | ループ1周 | ファイルサイズ | 生成時間 |
|---|---|---|---|---|---|
| web経路、ループ指示あり | 4×300ミリ秒 | 1024×1024 | 1.2秒 | 2.02MB | 43.5秒 |
| web経路、ループ指示あり | 9×200ミリ秒 | 1024×1024 | 1.8秒 | 4.53MB | 49.3秒 |
| web経路、短いあいまいなプロンプト | 9×200ミリ秒 | 1024×1024 | 1.8秒 | 4.85MB | 52.1秒 |
| web経路、ループ指示あり | 16×120ミリ秒 | 1024×1024 | 1.92秒 | 8.20MB | 49.3秒 |
| OpenAIがガイドで公開しているSunburstの作例 | 9×200ミリ秒 | 512×512 | 1.8秒 | 1.28MB | 公開なし |
生成時間は混雑で変わります。LaoZhang APIのドキュメントは、同じweb経路の1024×1024で4〜9フレームが約35〜42秒、16フレームが約100秒、64フレームが約2分(約18MB)としています。OpenAIに直接送ったgpt-image-2.6-flareの512×512・9フレームは11〜12秒でした(同社ドキュメントチームの計測)。web経路を使うときは、HTTPクライアントやプロキシのタイムアウトを300秒以上にしておきます。
フレーム数を増やすと、容量と時間に加えて画質にも影響します。全フレームは1枚の大きなシートにまとめて描かれるため、フレームが多いほど1フレームに割ける細部が減り、LaoZhang APIのドキュメントも64フレームではフレームが甘くなると書いています。ループを長くしたいときは、フレーム数を増やすよりframe_duration_msを延ばすほうが、容量も画質も保ちやすくなります。動きを滑らかにしたい場合だけフレーム数を増やし、16フレームあたりから容量と画質を見比べてください。

GPT Image 2.6のGIFをどの経路で呼ぶか:サイズと課金で選ぶ
512×512のような小さいGIFを作るならOpenAIのAPIかLaoZhang APIの公式転送、1024×1024以上を1回定額で作るならLaoZhang APIのweb経路、という分け方になります。同じLaoZhang APIでもVIPモデル(-vip付き)はGIFを返さないので、GIF用には選びません。2026年11月5日時点の各経路の違いは次のとおりです。
注記:laozhang.ai は当ブログ運営チームの自社サービスです。その料金は中立的な比較ではなく、自社の提示価格です。

| 経路 | モデルID | GIFの最小サイズ | 課金 | フレーム数 | 1本の生成時間の目安 |
|---|---|---|---|---|---|
| OpenAIのAPIに直接 | gpt-image-2.6-flare、gpt-image-2.6-sunburst | 512x512で動作、256×256・2フレームは失敗 | トークン課金(画像出力$30/100万トークン) | ガイド2〜64、リファレンス2〜16 | Flare、512×512・9フレームで11〜12秒 |
| LaoZhang APIの公式転送 | 同じID(OpenAI Officialグループ) | 512x512で動作 | OpenAIと同じトークン単価(OpenAI Official Enterpriseは+20%) | OpenAIと同じ | Flare、512×512・9フレームで約11秒 |
| LaoZhang APIのweb経路 | gpt-image-2.6-web(defaultグループ) | 655,360ピクセル以上(正方形なら816x816から) | 1回$0.03、フレーム数とサイズで変わらない | 2〜64(65は400) | 1024×1024で43〜52秒(2026年11月5日の実測) |
| LaoZhang APIのVIP | gpt-image-2.6-flare-vipなど | GIF非対応(400) | 1枚$0.03 | — | — |
LaoZhang APIの公式転送はリクエスト本文がOpenAIとまったく同じで、上のPythonコードのOpenAI()にbase_url="https://api.laozhang.ai/v1"と公式転送グループのキーを渡せばそのまま動きます。web経路を使う場合は、defaultグループのキーでmodelをgpt-image-2.6-webに、sizeを"1024x1024"などに変えます。nは1だけで、混雑時に大きいサイズや多いフレームのGIFが約2分後に429を返すことがありますが、その場合は課金されません。経路ごとの設定はLaoZhang APIのGPT Image 2.6ドキュメントに載っています。
GIF 1枚の料金:トークン課金なら512×512・9フレームで約$0.062
OpenAIのAPIと公式転送では、GIF 1本の費用は出力トークン数で決まります。GPT Image 2.6の画像出力は100万トークンあたり$30(OpenAIの料金ページ)なので、512×512・9フレーム・mediumで出力2,073トークンなら、2,073×$30÷1,000,000=約$0.062です。プロンプトの入力トークン分は$0.001未満にとどまります。同じ計測でlow・4フレームは1,172トークン、約$0.035でした。比較の目安として、1024×1024の静止画をhighで1枚作ると1,756トークン、約$0.053です。
出力トークンはサイズ、品質、フレーム数で変わるため、1024×1024のGIFがトークン課金でいくらになるかは、公開された計測がありません。自分の設定での費用は、レスポンスのusageに出る出力トークン数に$30÷100万を掛けて確かめます。qualityを省略するとモデルが品質を選び、同じリクエストでも費用がぶれるので、明示しておきます。LaoZhang APIのweb経路はフレーム数やサイズにかかわらず1回$0.03(プラットフォームの提示価格)で、200以外の応答は課金されません。2.5から乗り換えるかどうかや品質別の静止画の費用は、GPT Image 2.6と2.5の違いで比較しています。
注記:laozhang.ai は当ブログ運営チームの自社サービスです。その料金は中立的な比較ではなく、自社の提示価格です。
GIFリクエストが失敗するとき:エラー別の原因と対処
GIFのリクエストで出やすい失敗は、範囲外の値、サイズの下限、経路の非対応、混雑、タイムアウトの5種類です。LaoZhang APIのweb経路では、範囲外の値に対するエラーのmessageは「上流がリクエストを受け付けなかった」としか言わないので、paramとcodeで原因を見分けます。表の境界値エラーのうち3件は2026年11月5日に実際に送って確かめたもので、いずれも1〜2秒で返り、課金されませんでした。
注記:laozhang.ai は当ブログ運営チームの自社サービスです。その料金は中立的な比較ではなく、自社の提示価格です。
| 症状・エラー | 原因 | 対処 |
|---|---|---|
400、code: invalid_image_request、paramが空(web経路でframe_count: 65を送ったとき、実測) | frame_countかframe_duration_msが範囲外 | frame_countは2〜64(OpenAIに直接なら16以下)、frame_duration_msは20〜2000に収める |
400、param: "size"、code: "invalid_value"(web経路で512x512、実測) | web経路の下限655,360ピクセルに届かない | 幅×高さを655,360ピクセル以上にする(正方形なら816x816以上、1024x640なども可)。512x512で作るならOpenAIか公式転送へ |
| 400「GIF and SVG output are not supported on this route」(VIPモデル、実測) | -vip付きのモデルはGIFを返さない | web経路か、公式転送のgpt-image-2.6-flare/-sunburstに切り替える |
No supported sheet fitsで始まるエラー(OpenAIに直接、256×256・2フレーム) | 全フレームを1枚のシートに描くため、小さすぎるサイズは下限に届かない | 512x512以上にする。512x512なら4〜9フレームで動作している |
400、code: invalid_image_request(web経路の/v1/images/editsでGIFを指定) | web経路の編集エンドポイントはGIFを返さない | /v1/images/generationsで生成する |
| 約2分後に429(web経路、混雑時) | 大きいサイズや多いフレームのGIFが上流の容量不足で拒否された(課金なし) | 時間をおいて再送するか、フレーム数かサイズを減らす |
| クライアントがタイムアウト | web経路のGIFは生成に40秒〜2分かかることがあり、クライアントやプロキシの待ち時間が足りない | タイムアウトを300秒以上にする。LaoZhang APIでは切断してもサーバー側の生成は止まらないので、すぐ再送せず呼び出しログを確認する |
unexpected keyword argument 'frame_count' | 古いSDKがGIF用の引数を知らない | extra_bodyで渡す(上のPythonコードの書き方) |
ループのつなぎ目がカクッとする理由と確認スクリプト
GIFの「ループ」には2つの意味があります。ひとつはファイルに書かれたループ指定で、GPT Image 2.6のGIFは0(無限ループ)になっていて、これは問題になりません。もうひとつは、最後のフレームから最初のフレームへ戻るときの動きが自然かどうかで、カクッとするのはこちらです。OpenAIの画像プロンプトガイドのループGIFの節は、滑らかにするには「戻ってくる開始ポーズを与え、カメラを動かすかどうかを書く」よう勧めていますが、これは指示であって保証ではありません。
2026年11月5日にweb経路で作ったGIFを、「最後→最初のフレームの差 ÷ 隣り合うフレームの差の平均」という指標で測った結果は次のとおりです。1以下なら、戻るときの跳びが、隣り合うフレーム間の普段の動きより大きくないという意味です。OpenAIの例文どおりにループを指示した9フレームは1.38で、ランタンとポーズが戻りきらずに跳ぶのが目で見ても分かりました。同じ設定で「A cute monkey with a lantern in the snow, animated.」とだけ書いたGIFは1.08、ループ指示ありの4フレームは0.72、16フレームは0.93です。比較用に測ると、OpenAIがガイドで公開しているSunburstの作例は0.72、LaoZhang APIのドキュメントにあるFlareの作例は0.68でした。各条件1本ずつの結果なので、ループの指示が滑らかさを保証しないことは言えますが、あいまいなプロンプトのほうが良いとは言えません。
注記:laozhang.ai は当ブログ運営チームの自社サービスです。その料金は中立的な比較ではなく、自社の提示価格です。
次のスクリプトは、GIFのフレーム数・表示時間・ループ指定と、つなぎ目の指標をまとめて表示します。python3 check_gif.py loop.gifのように実行します。
import sys
from PIL import Image, ImageChops, ImageStat
def diff(a, b):
# 2枚のフレームの平均画素差(0〜100%)
d = ImageChops.difference(a, b)
return sum(ImageStat.Stat(d).mean) / 3 / 255 * 100
im = Image.open(sys.argv[1])
loop = im.info.get("loop")
frames, durations = [], []
try:
while True:
frames.append(im.copy().convert("RGB"))
durations.append(im.info.get("duration"))
im.seek(im.tell() + 1)
except EOFError:
pass
steps = [diff(frames[i], frames[i + 1]) for i in range(len(frames) - 1)]
seam = diff(frames[-1], frames[0])
print("frames:", len(frames), "duration_ms:", sorted(set(durations)), "loop:", loop)
print("seam / step:", round(seam / (sum(steps) / len(steps)), 2))seam / stepが1を大きく超えたら、最後から最初へ戻る瞬間に跳びが出ている可能性が高いので、実際に再生して確かめ、気になるなら同じリクエストで作り直します。指標は画面全体の平均なので、背景が大きく動くGIFでは小さな被写体の跳びを見逃すことがあり、最終判断は目で見て行います。loopが0ならファイル側は無限ループです。開始ポーズの書き方などプロンプト全般はGPT Image 2.6のプロンプトの書き方を参照してください。
手持ちの画像をAPIでGIFにできるか:ガイドは編集からのGIFに非対応
OpenAIの画像生成ガイドは、GIF出力は生成用で、画像編集エンドポイントはGIF出力に対応しないと明記しています。一方で、OpenAIのAPIリファレンス(images.edit)には2026年11月5日時点でoutput_formatの値として"gif"があり、frame_count(2〜16)とframe_duration_msも載っていて、文書どうしが食い違っています。手持ちの写真やイラストを動かす手順を説明した公式の案内はなく、LaoZhang APIのweb経路では、編集エンドポイントでGIFを指定するとinvalid_image_requestで拒否されます。
注記:laozhang.ai は当ブログ運営チームの自社サービスです。その料金は中立的な比較ではなく、自社の提示価格です。
例外として、LaoZhang APIのドキュメントチームは2026年11月5日に、公式転送の編集リクエストからGIFが返った例を1回観測しており、同社のドキュメントもこれを公式転送の用途に挙げています。ただしガイドが非対応としている使い方で、OpenAIに直接送った場合の結果は公開されていません。予告なく使えなくなる可能性があるため、本番の処理はこれに頼らず、生成エンドポイントでGIFを作る設計にしておくのが安全です。画像の一部に印を付けて直す編集はGPT Image 2.6のマークアップ編集API、アイコンやロゴをベクターで出す方法はGPT Image 2.6のAPIでSVGを出力する方法を参照してください。
参考資料5
本文で参照している外部ページを、登場順に並べています。最終更新日:2026年11月5日。
参考資料5
本文で参照している外部ページを、登場順に並べています。最終更新日:2026年11月5日。
- 1.OpenAIの画像生成ガイド(GIF出力の節)developers.openai.com/api/docs/guides/image-generation
- 2.OpenAIのAPIリファレンス(images.generate)developers.openai.com/api/reference/resources/images/methods/generate
- 3.OpenAIの料金ページdevelopers.openai.com/api/docs/pricing
- 4.画像プロンプトガイドのループGIFの節developers.openai.com/api/docs/guides/image-prompting
- 5.OpenAIのAPIリファレンス(images.edit)developers.openai.com/api/reference/resources/images/methods/edit





