Перейти к основному содержанию

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 за вызов.

LaoZhang AI TeamОпубликовано12 мин чтения
Содержание
GIF в GPT Image 2.6 через API: запрос с output_format gif, 9 кадров по 200 мс по умолчанию и файл .gif с бесконечным повтором

Анимированный 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.

  1. Выберите модель: gpt-image-2.6-flare быстрее, gpt-image-2.6-sunburst прорисовывает больше деталей. Для LaoZhang API с оплатой за вызов модель одна — gpt-image-2.6-web.
  2. Задайте size — это размер одного кадра, а не всей анимации. По руководству OpenAI стороны кратны 16, auto оставляет выбор API. Для gpt-image-2.6-web передавайте size всегда и не меньше 816x816.
  3. Добавьте "output_format": "gif", frame_count и frame_duration_ms. Без них будет 9 кадров по 200 мс.
  4. Декодируйте data[0].b64_json и сохраните как .gif, затем проверьте число кадров и стык скриптом из раздела о цикле.

Примечание: laozhang.ai — наш собственный сервис; его цены — наши тарифы, а не независимое сравнение.

Запрос напрямую к OpenAI через curl. Ответ сначала пишется в gif.json: если запрос упадёт, там останутся code и param ошибки.

bash
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 генерируется дольше обычной картинки:

python
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 OpenAIgpt-image-2.6-web (LaoZhang API)
frame_count2–64, по умолчанию 92–16, по умолчанию 92–64, по умолчанию 9
frame_duration_ms20–2000 мс, округление до 10 мс, по умолчанию 200от 20 мс, округление до 10 мс, по умолчанию 20020–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 × 3001,2 с1024×10242,02 МБ43,5 с
gpt-image-2.6-web, промпт OpenAI про цикл9 × 2001,8 с1024×10244,53 МБ49,3 с
gpt-image-2.6-web, короткий промпт без слов о цикле9 × 2001,8 с1024×10244,85 МБ52,1 с
gpt-image-2.6-web, промпт OpenAI про цикл16 × 1201,92 с1024×10248,20 МБ49,3 с
Образец OpenAI, gpt-image-2.6-sunburst9 × 2001,8 с512×5121,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 не отдают совсем.

Выбор маршрута для GIF в GPT Image 2.6: кадр меньше 816×816 — Flare или Sunburst по токенам, от 816×816 и больше 16 кадров — gpt-image-2.6-web, у моделей -vip GIF нет

МаршрутМодельНаименьший кадрКадровОплата
OpenAI напрямуюgpt-image-2.6-flare, gpt-image-2.6-sunburst512×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, VIPgpt-image-2.6-flare-vip, gpt-image-2.6-sunburst-vipGIF нет—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-webframe_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-vipVIP-модели не делают 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-webn больше 1Отправлять несколько запросов по одному GIF
429 примерно через 2 минутыgpt-image-2.6-web в часы пикНехватка мощности на крупных GIF и GIF с большим числом кадров; не списываетсяПовторить позже либо уменьшить число кадров или размер
Тайм-аут на стороне клиентаВсе маршрутыGIF 1024×1024 на 16 кадров по документации LaoZhang API идёт около 100 секунд, на 64 кадра — около 2 минутПоставить тайм-аут клиента от 300 секунд
GIF вернулся маленьким и странного размера, например 439×390gpt-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 — наш собственный сервис; его цены — наши тарифы, а не независимое сравнение.

Схема стыка цикла GIF: обычные шаги между соседними кадрами и переход с 9-го кадра на 1-й, ниже замеры от 0,68 до 1,38 с порогом 1

Скрипту нужен только Pillow (pip install pillow). Сохраните его как check_gif.py и передайте один или несколько GIF:

python
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}")
bash
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 г..

  1. 1.Руководство OpenAI по генерации изображенийdevelopers.openai.com/api/docs/guides/image-generation
  2. 2.справочник OpenAI по методу images.generatedevelopers.openai.com/api/reference/resources/images/methods/generate
Иллюстрация ChatGPT Images 2.5: создание картинки в диалоге, выбор модели в API и готовый файл
Руководства по API

ChatGPT Images 2.5: как пользоваться и где выбрать Sunburst или Flare

В ChatGPT Images 2.5 можно создавать и редактировать изображения прямо в диалоге. Объясняем, как начать работу, где выбрать Flare или Sunburst в API и почему по картинке в чате нельзя достоверно определить модель.

7 мин