GPT Image 2.6 GIF API: как сделать GIF-анимацию, 16 или 64 кадра
GIF включает поле output_format: gif на /v1/images/generations. Напрямую в OpenAI — до 16 кадров и ~$0,06 за 512×512, web-маршрут LaoZhang — $0,03 за вызов.
Содержание

Анимированный GIF в GPT Image 2.6 получается обычным запросом на генерацию. К POST /v1/images/generations с моделью gpt-image-2.6-flare или gpt-image-2.6-sunburst добавьте "output_format": "gif", число кадров frame_count и длительность одного кадра frame_duration_ms, затем декодируйте data[0].b64_json из base64 и запишите байты в файл .gif, который по умолчанию повторяется бесконечно. OpenAI открыла эту возможность в API 4 ноября 2026 года вместе с Images 2.6. Эндпоинт правок /v1/images/edits GIF по документации не возвращает: анимацию можно только сгенерировать.
Сколько кадров просить, зависит от того, куда уходит запрос. Руководство OpenAI разрешает от 2 до 64 кадров, а справочник API по состоянию на 5 ноября 2026 года — от 2 до 16, поэтому код, который ходит напрямую в OpenAI, держите в пределах 16 кадров. Там GIF оплачивается по токенам: 512×512, 9 кадров на medium обошлись примерно в $0,062. Модель gpt-image-2.6-web в LaoZhang API берёт фиксированные $0,03 за вызов и по своей документации принимает до 64 кадров, но кадр меньше 816×816 она отклоняет.
Примечание: laozhang.ai — наш собственный сервис; его цены — наши тарифы, а не независимое сравнение.
5 ноября 2026 года через gpt-image-2.6-web было сгенерировано четыре GIF 1024×1024. Все вернулись ровно с тем числом и длительностью кадров, которые были запрошены, весили от 2,02 до 8,20 МБ и создавались 43–52 секунды. Просьба в промпте вернуться в исходную позу при этом не гарантировала плавный стык: у 9-кадрового варианта переход от последнего кадра к первому оказался резче обычного шага анимации. Поэтому готовый GIF перед публикацией стоит проверить коротким скриптом, он приведён ниже.
Как получить GIF из GPT Image 2.6 API: запрос, base64 и файл .gif
GIF возвращается в том же поле b64_json, что и обычная картинка, поэтому весь путь укладывается в четыре действия: выбрать модель и размер кадра, отправить запрос с полями GIF, декодировать ответ и проверить файл. Пример ниже повторяет запрос из руководства OpenAI по промптам (обезьянка с фонарём, цикл 1,8 секунды), только на модели Flare и на medium.
- Выберите модель:
gpt-image-2.6-flareбыстрее,gpt-image-2.6-sunburstпрорисовывает больше деталей. Для LaoZhang API с оплатой за вызов модель одна —gpt-image-2.6-web. - Задайте
size— это размер одного кадра, а не всей анимации. По руководству OpenAI стороны кратны 16,autoоставляет выбор API. Дляgpt-image-2.6-webпередавайтеsizeвсегда и не меньше816x816. - Добавьте
"output_format": "gif",frame_countиframe_duration_ms. Без них будет 9 кадров по 200 мс. - Декодируйте
data[0].b64_jsonи сохраните как.gif, затем проверьте число кадров и стык скриптом из раздела о цикле.
Примечание: laozhang.ai — наш собственный сервис; его цены — наши тарифы, а не независимое сравнение.
Запрос напрямую к OpenAI через curl. Ответ сначала пишется в gif.json: если запрос упадёт, там останутся code и param ошибки.
curl https://api.openai.com/v1/images/generations \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2.6-flare",
"prompt": "A little monkey in an olive-green hooded coat stands in a snowy pine forest at dusk. A wooden cabin glows in the background. 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.",
"output_format": "gif",
"size": "512x512",
"quality": "medium",
"frame_count": 9,
"frame_duration_ms": 200
}' -o gif.json
jq -r '.data[0].b64_json' gif.json | base64 --decode > anim.gifТо же на Python с официальным SDK openai. Поля кадров переданы через extra_body, а тайм-аут поднят до 300 секунд, потому что GIF генерируется дольше обычной картинки:
import base64
from openai import OpenAI
PROMPT = (
"A little monkey in an olive-green hooded coat stands in a snowy pine forest at dusk. "
"A wooden cabin glows in the background. 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."
)
client = OpenAI() # ключ из переменной OPENAI_API_KEY
# LaoZhang API: OpenAI(api_key="ВАШ_КЛЮЧ", base_url="https://api.laozhang.ai/v1")
result = client.images.generate(
model="gpt-image-2.6-flare", # web-маршрут LaoZhang: "gpt-image-2.6-web"
prompt=PROMPT,
size="512x512", # для gpt-image-2.6-web не меньше "816x816"
quality="medium",
output_format="gif",
extra_body={"frame_count": 9, "frame_duration_ms": 200},
timeout=300,
)
for number, item in enumerate(result.data, start=1):
raw = item.b64_json.split(",", 1)[-1] # на случай префикса data:image/gif;base64,
path = f"anim-{number}.gif"
with open(path, "wb") as f:
f.write(base64.b64decode(raw))
print("Сохранено:", path)Если старая версия Python SDK отказывается принимать frame_count или frame_duration_ms как именованные аргументы и падает с TypeError про неожиданный аргумент, обновлять код не обязательно. Поля, которых SDK ещё не знает, передаются через extra_body, как в примере выше: SDK добавит их в JSON запроса без проверки, а API примет их как обычные параметры. Для gpt-image-2.6-web в том же скрипте меняются три строки: base_url и ключ LaoZhang API, имя модели и size от 816x816. Параметр quality в примере web-маршрута из документации LaoZhang API не передаётся.
Лимиты кадров: 16 по справочнику OpenAI, 64 по руководству
Верхняя граница frame_count у OpenAI описана двумя способами, и по состоянию на 5 ноября 2026 года они расходятся. Руководство OpenAI по генерации изображений называет диапазон 2–64 кадра и 20–2000 мс на кадр, а справочник OpenAI по методу images.generate пишет «от 2 до 16» с maximum: 16 и не ставит потолок 2000 мс для frame_duration_ms. Запросы больше чем на 9 кадров к API самой OpenAI в доступных замерах не проверялись, поэтому какой документ точнее, неизвестно. Если код обязан работать напрямую с OpenAI, 16 кадров — безопасный предел. На gpt-image-2.6-web действует документация LaoZhang API с диапазоном 2–64: запрос на 65 кадров 5 ноября 2026 года вернул 400, а 16 кадров прошли без ошибок.
Примечание: laozhang.ai — наш собственный сервис; его цены — наши тарифы, а не независимое сравнение.
| Параметр | Руководство OpenAI | Справочник API OpenAI | gpt-image-2.6-web (LaoZhang API) |
|---|---|---|---|
frame_count | 2–64, по умолчанию 9 | 2–16, по умолчанию 9 | 2–64, по умолчанию 9 |
frame_duration_ms | 20–2000 мс, округление до 10 мс, по умолчанию 200 | от 20 мс, округление до 10 мс, по умолчанию 200 | 20–2000 мс, по умолчанию 200 |
size | размер одного кадра, стороны кратны 16, или auto | должен укладываться в лимиты GIF модели | не меньше 655 360 пикселей, наименьший квадрат 816×816; передавать всегда |
n | вместе с кадрами и размером кадра входит в общий бюджет пикселей | — | только 1 |
| Не работает с GIF | стриминг, промежуточные кадры, output_compression, prompt_rewriter, эндпоинт правок | стриминг, промежуточные кадры, маски, output_compression | стриминг (stream: true отдаёт GIF целиком), эндпоинт правок |
Справочник добавляет ещё одну оговорку: для GIF нужен «доступ к GIF preview для выбранной модели». Кому этот доступ открыт по умолчанию, OpenAI не пишет, поэтому при неожиданном отказе на ключе OpenAI проверьте и это условие.
Число кадров и размер кадра связаны через общий бюджет пикселей. Все кадры модель рисует на одном листе, поэтому в лимиты одновременно должны поместиться число кадров, размер кадра и число анимаций n. Если запрос не укладывается, руководство OpenAI советует уменьшить frame_count, размер кадра или n. У листа есть и нижний порог. В единичном замере команды документации LaoZhang API напрямую в OpenAI кадр 256×256 даже с двумя кадрами вернул ошибку No supported sheet fits, а 512×512 с 4–9 кадрами проходил без ошибок.
Число кадров и размер: что показали четыре GIF от 5 ноября 2026 года
Длина цикла равна frame_count × frame_duration_ms, а вес файла растёт почти пропорционально числу кадров. Это видно по четырём GIF, сгенерированным 5 ноября 2026 года через gpt-image-2.6-web ключом группы default (по одному прогону на строку), и по образцу, который OpenAI опубликовала в своём руководстве:
| GIF | Кадры × мс | Длина цикла | Кадр | Вес | Время генерации |
|---|---|---|---|---|---|
gpt-image-2.6-web, промпт OpenAI про цикл | 4 × 300 | 1,2 с | 1024×1024 | 2,02 МБ | 43,5 с |
gpt-image-2.6-web, промпт OpenAI про цикл | 9 × 200 | 1,8 с | 1024×1024 | 4,53 МБ | 49,3 с |
gpt-image-2.6-web, короткий промпт без слов о цикле | 9 × 200 | 1,8 с | 1024×1024 | 4,85 МБ | 52,1 с |
gpt-image-2.6-web, промпт OpenAI про цикл | 16 × 120 | 1,92 с | 1024×1024 | 8,20 МБ | 49,3 с |
Образец OpenAI, gpt-image-2.6-sunburst | 9 × 200 | 1,8 с | 512×512 | 1,28 МБ | не опубликовано |
Во всех пяти файлах флаг повтора равен 0, то есть анимация крутится бесконечно, а число и длительность кадров совпали с запрошенными до миллисекунды. В этой серии 16 кадров сгенерировались примерно за то же время, что и 9, но это по одному прогону на настройку, а время на web-маршруте меняется с нагрузкой. В документации LaoZhang API больше кадров означает дольше: для 1024×1024 там указаны 35–42 секунды на 4–9 кадров и около 100 секунд на 16. Там же приведены 64 кадра: около 2 минут, около 18 МБ и заметно более мягкие кадры, а 2048×2048 с 9 кадрами — около 54 секунд и около 11 МБ.
Примечание: laozhang.ai — наш собственный сервис; его цены — наши тарифы, а не независимое сравнение.
Отсюда практичный выбор. Значения по умолчанию, 9 кадров по 200 мс, дают цикл 1,8 секунды при 5 кадрах в секунду, и для стикера или реакции это разумная отправная точка. Если движение должно быть плавнее, 16 кадров по 120 мс поднимают частоту примерно до 8 кадров в секунду, но файл 1024×1024 вырастает до 8 МБ. Индикатору загрузки или иконке в интерфейсе 1024×1024 не нужен вовсе: напрямую в OpenAI кадр 512×512 весит в несколько раз меньше, а на web-маршруте меньше 816×816 не получится, и GIF придётся уменьшать уже после генерации.
Какой маршрут выбрать для GIF: OpenAI, переадресация LaoZhang, web или VIP
Выбор определяется двумя вещами: нужен ли кадр меньше 816×816 и как удобнее платить, за токены или за вызов. Маленькие GIF вроде 512×512 делаются только через модели gpt-image-2.6-flare и gpt-image-2.6-sunburst с оплатой по токенам, напрямую в OpenAI или через официальную переадресацию. Кадр от 816×816 и фиксированная цена за вызов — это gpt-image-2.6-web. Поштучные VIP-модели GIF не отдают совсем.

| Маршрут | Модель | Наименьший кадр | Кадров | Оплата |
|---|---|---|---|---|
| OpenAI напрямую | gpt-image-2.6-flare, gpt-image-2.6-sunburst | 512×512 проходит, 256×256 не прошёл | 2–16 по справочнику, 2–64 по руководству | токены по ценам OpenAI |
| LaoZhang API, официальная переадресация | те же ID, ключ группы OpenAI Official или OpenAI Official Enterprise | как у OpenAI, 512×512 работает | как у OpenAI | токены по ценам OpenAI, в Enterprise +20 % |
| LaoZhang API, web-маршрут | gpt-image-2.6-web, ключ группы default, Flare или Sunburst не выбираются | 816×816 (655 360 пикселей) | 2–64 по документации LaoZhang API | $0,03 за вызов |
| LaoZhang API, VIP | gpt-image-2.6-flare-vip, gpt-image-2.6-sunburst-vip | GIF нет | — | GIF-запрос возвращает 400 |
Примечание: laozhang.ai — наш собственный сервис; его цены — наши тарифы, а не независимое сравнение.
У LaoZhang API три маршрута для GPT Image 2.6 различаются группой ключа, а не только именем модели. Официальная переадресация принимает те же тела запросов, что OpenAI, и в коде меняются только адрес https://api.laozhang.ai/v1 и ключ группы OpenAI Official. По документации этой группы через неё работают и маленькие GIF. Web-маршрут удобен, когда нужен GIF 1024×1024 и крупнее по одной цене при любом числе кадров. Ограничения у него такие: n только 1, стриминга нет, тайм-аут клиента нужен от 300 секунд, а правки GIF не возвращают. Векторный SVG он тоже не отдаёт: как получить SVG через API, разобрано в статье о выводе SVG в GPT Image 2.6. Все условия маршрутов собраны в документации LaoZhang API по GPT Image 2.5 и 2.6.
Сколько стоит один GIF: около 6 центов по токенам или 3 цента за вызов
Напрямую в OpenAI и через официальную переадресацию GIF оплачивается как картинка: по выходным токенам, $30 за 1 млн, плюс текст промпта по $5 за 1 млн, что на один запрос даёт меньше $0,001. 5 ноября 2026 года команда документации LaoZhang API замерила два GIF на gpt-image-2.6-flare напрямую в OpenAI, по одному прогону. Кадр 512×512, medium, 9 кадров занял 2 073 выходных токена: 2 073 × $30 / 1 000 000 ≈ $0,062, генерация длилась 11–12 секунд. Кадр 512×512, low, 4 кадра — 1 172 токена, то есть 1 172 × $30 / 1 000 000 ≈ $0,035. Для сравнения, одна статичная картинка 1024×1024 на medium в той же серии заняла 1 449 токенов, около $0,043.
Примечание: laozhang.ai — наш собственный сервис; его цены — наши тарифы, а не независимое сравнение.
Цифры за GIF других размеров, другого качества и с другим числом кадров будут другими, потому что счёт идёт за фактические выходные токены. Замеры команды документации LaoZhang API охватывают только GIF 512×512. В группе OpenAI Official Enterprise тот же 9-кадровый GIF стоит на 20 % дороже, около $0,075. На gpt-image-2.6-web цена не зависит ни от числа кадров, ни от размера: 4 кадра и 16 кадров 1024×1024 стоили одинаково, а ответы с ошибкой, включая 429, по документации не списываются.
Получается простое правило: маленький GIF 512×512 делается только по токенам и стоит около 3,5–6 центов, а GIF от 816×816 с фиксированной ценой выгоднее брать на web-маршруте, если ваш бюджет считается в вызовах. Сколько стоят статичные картинки на каждом уровне качества и стоит ли вообще переходить с 2.5, разобрано в статье «GPT Image 2.6: отличия от 2.5 — GIF, SVG и low в 4 раза дороже».
Ошибки GIF-запроса: 400, No supported sheet fits, 429 и тайм-аут
Почти все сбои GIF-запроса приходят как HTTP 400 с понятным полем param или code, и их не исправить повтором: нужно менять сам запрос. Повторять имеет смысл только 429 и тайм-аут. Первые три строки таблицы воспроизведены 5 ноября 2026 года отдельными вызовами LaoZhang API, каждый занял 1–2 секунды и не списывался. Остальные взяты из руководства OpenAI, документации LaoZhang API и замера её команды документации.
Примечание: laozhang.ai — наш собственный сервис; его цены — наши тарифы, а не независимое сравнение.
| Что пришло | Где | Причина | Что сделать |
|---|---|---|---|
400, code: "invalid_image_request", пустой param, текст только о том, что запрос не принят | gpt-image-2.6-web | frame_count или frame_duration_ms вне диапазона, например 65 кадров; тот же код получает GIF с эндпоинта правок | Вернуть значения в 2–64 кадра и 20–2000 мс, GIF запрашивать только через генерацию |
400, param: "size", code: "invalid_value" | gpt-image-2.6-web | Кадр меньше 655 360 пикселей, например 512x512 | Поставить 816x816 или 1024x1024, а для маленьких GIF перейти на Flare или Sunburst с оплатой по токенам |
400 GIF and SVG output are not supported on this route; use gpt-image-2.6-flare / gpt-image-2.6-sunburst in the OpenAI Official group. | gpt-image-2.6-flare-vip, gpt-image-2.6-sunburst-vip | VIP-модели не делают GIF | Сменить модель на gpt-image-2.6-web или на Flare и Sunburst в группе OpenAI Official |
No supported sheet fits… | OpenAI, Flare и Sunburst | Кадр слишком мал для листа, на котором рисуются все кадры: так упал 256×256 даже с 2 кадрами | Увеличить кадр до 512×512 |
| Запрос не укладывается в лимиты модели | OpenAI | Число кадров, размер кадра и n вместе превышают бюджет пикселей | Уменьшить frame_count, размер кадра или n |
400, param: "n", code: "invalid_value" | gpt-image-2.6-web | n больше 1 | Отправлять несколько запросов по одному GIF |
| 429 примерно через 2 минуты | gpt-image-2.6-web в часы пик | Нехватка мощности на крупных GIF и GIF с большим числом кадров; не списывается | Повторить позже либо уменьшить число кадров или размер |
| Тайм-аут на стороне клиента | Все маршруты | GIF 1024×1024 на 16 кадров по документации LaoZhang API идёт около 100 секунд, на 64 кадра — около 2 минут | Поставить тайм-аут клиента от 300 секунд |
| GIF вернулся маленьким и странного размера, например 439×390 | gpt-image-2.6-web | Запрос отправлен без size | Всегда передавать size |
Отказ SDK принять frame_count и frame_duration_ms в этот список не входит, потому что до API такой запрос не доходит. Он лечится передачей полей через extra_body, как в разделе с кодом.
Как проверить, что GIF зацикливается без скачка
У «зацикленности» GIF два разных смысла, и проверять нужно оба. Первый — флаг повтора внутри файла: значение 0 означает бесконечное воспроизведение, и у всех GIF из GPT Image 2.6, проверенных 5 ноября 2026 года, он уже стоит. Второй — плавный стык: последний кадр должен переходить в первый так же мягко, как соседние кадры друг в друга. Его модель не гарантирует, и именно на нём заметен «прыжок» каждые 1–2 секунды.
OpenAI в своём руководстве по промптам советует для плавного цикла дать объекту исходную позу, в которую он вернётся, и прямо сказать, двигается ли камера. Проверка 5 ноября 2026 года показала, что этот совет не гарантирует результат. Скрипт ниже делит среднюю разницу пикселей между последним и первым кадром на среднюю разницу между соседними кадрами. У 9-кадрового GIF с промптом OpenAI получилось 1,38, и на стыке видно, как фонарь и поза обезьянки прыгают. Тот же запрос с коротким промптом без слов о цикле дал 1,08, вариант на 4 кадра — 0,72, на 16 кадров — 0,93. Опубликованный OpenAI образец Sunburst показал 0,72, GIF Flare из документации LaoZhang API — 0,68. На каждый промпт был один прогон, поэтому эти числа показывают только то, что просьба вернуться в исходную позу не страхует от скачка. Что короткие промпты замыкают цикл лучше, они не доказывают. Как формулировать движение и цикл в промпте, разобрано в руководстве по промптам для GPT Image 2.6.
Примечание: laozhang.ai — наш собственный сервис; его цены — наши тарифы, а не независимое сравнение.

Скрипту нужен только Pillow (pip install pillow). Сохраните его как check_gif.py и передайте один или несколько GIF:
import sys
from PIL import Image, ImageChops, ImageStat
def diff(a, b):
"""Средняя разница пикселей двух кадров, % от полной шкалы."""
d = ImageChops.difference(a, b)
return sum(ImageStat.Stat(d).mean) / 3 / 255 * 100
for path in sys.argv[1:]:
im = Image.open(path)
loop = im.info.get("loop")
frames, durations = [], []
try:
while True:
frames.append(im.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)]
step = sum(steps) / len(steps)
seam = diff(frames[-1], frames[0])
print(f"{path}: {im.size[0]}x{im.size[1]}, кадров {len(frames)}, "
f"мс {sorted(set(durations))}, loop={loop}, стык {seam / step:.2f}")python3 check_gif.py anim.gif
# anim.gif: 1024x1024, кадров 9, мс [200], loop=0, стык 1.38Читать результат просто. Число кадров и миллисекунды должны совпасть с frame_count и frame_duration_ms из запроса, loop=0 означает бесконечный повтор. Стык до 1 значит, что скачок с последнего кадра на первый не больше обычного шага анимации, и на глаз цикл выглядит цельным. Заметно больше 1, как 1,38 в примере, — сигнал посмотреть GIF глазами и при видимом рывке сгенерировать заново: та же генерация с тем же промптом даёт другой результат. Скрипт сравнивает только кадры между собой, поэтому для почти статичной анимации с крошечным шагом даже небольшой стык даст большое число. В таком случае решает просмотр.
Можно ли сделать GIF из готовой картинки через /v1/images/edits
По документации нельзя. Руководство OpenAI прямо пишет, что GIF доступен только для генерации и эндпоинт правок его не возвращает. На gpt-image-2.6-web такой запрос получает 400 с кодом invalid_image_request. Единственное исключение замечено один раз: 5 ноября 2026 года команда документации LaoZhang API получила GIF в ответ на правку через официальную переадресацию. OpenAI это поведение не описывает, и оно может перестать работать в любой момент, поэтому строить на нём продукт рискованно. Надёжный путь по документации — сгенерировать анимацию заново и подробно описать в промпте объект с исходной картинки.
Примечание: laozhang.ai — наш собственный сервис; его цены — наши тарифы, а не независимое сравнение.
Правки по разметке — другая функция того же эндпоинта: вы обводите область на копии изображения и описываете изменение. Как она работает через API, разобрано в статье о правках по разметке в GPT Image 2.6. Если анимация нужна без кода, её можно сделать прямо в чате, подробности в статье «Как сделать GIF в ChatGPT: кадры, скорость и что перерисуется».
Источники2
Внешние страницы, на которые ссылается это руководство, в порядке упоминания. Последнее обновление: 5 нояб. 2026 г..
Источники2
Внешние страницы, на которые ссылается это руководство, в порядке упоминания. Последнее обновление: 5 нояб. 2026 г..





