Примечание автора: при генерации GIF с помощью GPT Image 2.6 Sunburst параметр size задаёт размер одного кадра, а реальное ограничение действует на спрайт-лист, собранный из всех кадров. В этой статье правила разбираются по пунктам в таблицах, а также приводятся предельные размеры для разного числа кадров.
Многие разработчики, впервые делая GIF через gpt-image-2.6-sunburst, сталкиваются с такой ситуацией: ставят size в 1024×1024, задают всего 2 кадра, а API сразу возвращает 400. Причина в том, что для GIF правила по размеру отличаются от статичных изображений. В статье описан трёхшаговый метод пересчёта «размер кадра → раскладка спрайт-листа → ограничения спрайт-листа», который помогает понять, пройдёт ли проверку любая комбинация size и frame_count.
Это не простой перевод описания параметров. Граничные значения в статье взяты из измерений на официальном прокси-маршруте от 2026-11-09. Для каждого лимита в таблице показан ход расчёта, так что вы можете перепроверить его самостоятельно.
Главное, что вы получите: после этой статьи вы сможете подбирать размер одного кадра под нужное число кадров, избегать ошибок вроде GIF frames exceed the total request pixel budget и понимать, чем руководствоваться при выборе между 512×512, 768×768 и 960×960.

Ключевые моменты по размерам GIF в GPT Image 2.6 Sunburst
Сначала посмотрите на таблицу с ключевыми правилами генерации GIF, а ниже разберём каждый пункт подробнее.
| Пункт | Описание | Что это значит для вас |
|---|---|---|
size — это размер одного кадра |
size задаёт ширину и высоту каждого кадра, а не итогового GIF |
Проверяется именно общий спрайт-лист, поэтому нельзя оценивать по размеру одного кадра |
| Все кадры используют один спрайт-лист | Модель сначала рисует каждый кадр на одном sprite sheet, а затем нарезает его в GIF | Чем больше кадров, тем меньше размер, доступный для одного кадра |
| Раскладка спрайт-листа фиксирована | Для 2–8 кадров — 4×2, для 9 кадров — 3×3, для 10–12 — 4×3, для 13–16 — 4×4 | 2 и 8 кадров занимают одинаковую площадь спрайт-листа |
| Ширина и высота должны быть кратны 16 | В size можно передать auto или WIDTHxHEIGHT, где и ширина, и высота кратны 16 |
Подходят значения вроде 832, 816, 720 |
| При превышении лимита возвращается 400 | В ошибке param будет size |
При ошибке в первую очередь проверяйте размер спрайт-листа |
Механизм сборки спрайт-листа для GIF в GPT Image 2.6
Процесс создания GIF в GPT Image 2.6 Sunburst состоит из двух шагов: сначала все кадры рисуются на одной большой картинке по фиксированной сетке, затем эта картинка нарезается на отдельные кадры и из них собирается анимация с учётом frame_duration_ms. Поэтому ограничения на размер смотрят не на отдельный кадр, а на длину стороны этого спрайт-листа, общее число пикселей и соотношение длинной и короткой сторон.
Раскладка выбирается по диапазонам числа кадров и не подгоняется под фактическое количество. Например, если задать frame_count равным 2, система всё равно использует раскладку 4×2. Пример из справочных материалов это подтверждает: для 2 кадров размером 2048×2048 каждый спрайт-лист уже будет 8192×4096. При оценке обязательно используйте «число ячеек в раскладке», а не «фактическое число кадров».
Разбор базовых параметров GIF в GPT Image 2.6
Кроме size, у GIF есть два собственных параметра: frame_count задаёт число кадров, а frame_duration_ms — сколько держится каждый кадр. Общая длительность равна числу кадров, умноженному на длительность одного кадра. Например, 2 кадра × 100ms — это цикл на 0,2 секунды.
| Параметр | Официальный диапазон и значение по умолчанию | Подробности |
|---|---|---|
frame_count |
2–16, по умолчанию 9 | Чем больше кадров, тем обычно выше время выполнения и стоимость; при выходе за диапазон ошибки не будет — значение откатится к дефолтному |
frame_duration_ms |
20–2000ms, по умолчанию 200ms | Округляется до 10ms; комбинация по умолчанию — 9 кадров × 200ms = 1,8 секунды |
size |
auto или WIDTHxHEIGHT |
И ширина, и высота должны быть кратны 16; задаёт размер одного кадра |
output_format |
Укажите "gif" |
frame_count и frame_duration_ms действуют только для GIF |
quality |
Например, low и т. п. |
Для недорогих тестов советуем low |
На поведение frame_count при выходе за границы стоит обратить особое внимание. Если передать 1 или 17, API не вернёт 400, а просто отбросит frame_count и frame_duration_ms и откатится к значениям по умолчанию: 9 кадров и 1,8 секунды. То есть запрос «успешно» выполнится, но результат будет не тем, который вы хотели. В такой ситуации нужно после генерации проверить фактическое число кадров инструментами — как именно, расскажем в разделе быстрого старта.

Подробный разбор границ размеров Sunburst GIF в GPT Image 2.6
Этот раздел — ключевой во всей статье. Если собрать вместе ограничения на составное изображение и правила раскладки, можно вывести верхние пределы размеров для каждого диапазона количества кадров.
Четыре ограничения для составного изображения в GPT Image 2.6
| Ограничение | Граничное значение | Пояснение |
|---|---|---|
| Длина стороны составного изображения | ≤ 3840 | Ширина и высота составного изображения не могут превышать 3840 пикселей |
| Верхний предел общего числа пикселей составного изображения | ≤ 8 294 400 | Равно 3840×2160, то есть количеству пикселей одного 4K-кадра |
| Нижний предел общего числа пикселей составного изображения | ≥ примерно 655 360 | В тестах 589 824 отклонено, 665 856 прошло |
| Соотношение длинной и короткой сторон составного изображения | ≤ 3:1 | Слишком вытянутое составное изображение будет отклонено |
| Размер кадра | Ширина и высота кратны 16 | Если условие не выполнено, значение нельзя использовать как допустимый size |
С верхними ограничениями всё довольно понятно. Длина стороны 3840 и общее число пикселей 8 294 400 — это два независимых ограничения, которые нужно соблюдать одновременно. При небольшом числе кадров ширина составного изображения обычно первой упирается в ограничение на длину стороны; при большом числе кадров раньше исчерпывается лимит общего числа пикселей.
Нижний предел часто упускают из виду. Отклонённые в тестах 589 824 пикселя — это ровно 768×768, что соответствует составному изображению 3×3 из 9 кадров размером 256×256. Прошедшие проверку 665 856 пикселей — это 816×816, что соответствует 9 кадрам по 272×272. Отсюда можно сделать вывод: если кадр слишком маленький, а раскладка содержит мало ячеек, составное изображение тоже могут отклонить из-за слишком маленького размера. Например, при раскладке 4×2 и кадре 256×256 составное изображение будет всего 1024×512, то есть 524 288 пикселей — ниже нижнего предела. Так что у стратегии «уменьшить размер и сэкономить» тоже есть нижняя граница.
Влияние соотношения длинной и короткой сторон заметнее на неквадратных кадрах. Если посчитать для раскладки 4×2, то при кадре 16:9 соотношение ширины и высоты составного изображения составит около 3,56:1, что превышает 3:1; при переходе на раскладку 3×3 или 4×4 соотношение снизится. Это расчёт на основе правил, поэтому перед запуском рекомендую подтвердить его реальными тестами.
Максимальный размер квадратного кадра при разном числе кадров в GPT Image 2.6
Пределы ниже рассчитаны для «квадратного одиночного кадра + ширина и высота кратны 16» — можно сразу использовать как справочник.
| Число кадров | Раскладка | Макс. размер квадратного кадра | Расчёт |
|---|---|---|---|
| 2–8 | 4×2 | 960×960 | Ограничение по одной стороне: 4×960 = 3840; общее число пикселей 7,372,800 — в пределах бюджета |
| 9 | 3×3 | 960×960 | 9×960² = 8,294,400 — ровно в бюджет |
| 10–12 | 4×3 | 816×816 | 12×832² = 8,306,688 — превышение на 12,288 пикселей, отклонено; откат к 816 |
| 13–16 | 4×4 | 720×720 | 16×720² = 8,294,400 — ровно в бюджет |
Есть два нюанса, которые стоит пояснить.
- Для 10–12 кадров расчёт идёт по 12 ячейкам: раскладка 4×3, и даже если нужно всего 10 кадров, коллаж всё равно занимает пиксели под 12 ячеек. В тестах 12 кадров при 832² превысили бюджет всего на 12,288 пикселя — и их отклонили, так что бюджет соблюдается строго.
- Для 2–8 кадров действует ограничение по одной стороне: по общему числу пикселей здесь ещё есть запас, но ширина коллажа в 4 раза больше ширины одного кадра, поэтому 960 — уже максимум. При 1024 ширина коллажа стала бы 4096.

Как выбрать рабочие размеры для GPT Image 2.6
Если перевести указанные выше лимиты в практические рекомендации, получаются следующие выводы:
| Размер одного кадра | Доступное число кадров | Пример итоговой сетки | Рекомендации по применению |
|---|---|---|---|
| 512×512 | доступны все 2–16 кадров | при 16 кадрах 2048×2048 | самый надёжный вариант: стикеры, анимация иконок, пакетная генерация |
| 768×768 | максимум 12 кадров | при 12 кадрах 3072×2304 | при 16 кадрах сетка 3072×3072 = 9,437,184 — выход за бюджет |
| 960×960 | максимум 9 кадров | при 9 кадрах 2880×2880 | когда нужен крупный кадр и немного кадров |
| 1280×720 | 9 кадров | 3840×2160 | широкоэкранный вариант: сетка ровно укладывается в максимальную сторону и в бюджет |
| 1024×1024 | недоступен при любом числе кадров | при 2–8 кадрах ширина 4096 | при 9 кадрах выход за бюджет, в остальных вариантах превышена максимальная сторона |
| 2048×2048 | недоступен при любом числе кадров | при 2 кадрах 8192×4096 | сильно превышает все ограничения |
1024×1024 часто используется для статичных изображений, но для GIF он совершенно непригоден. При 2–8 и 10–12 кадрах ширина сетки составляет 4096, что больше 3840; при 9 кадрах сетка 3072×3072, суммарно 9,437,184 пикселя — выход за бюджет; при 13–16 кадрах ширина сетки тоже 4096. Поэтому при переходе со статичных изображений на GIF первым делом нужно уменьшить размер по умолчанию.
Если нужно горизонтальное изображение, рекомендуем 9 кадров с 1280×720. В этом случае сетка имеет раскладку 3×3, ровно 3840×2160, соотношение сторон 16:9 — все три ограничения соблюдены.
💡 Совет по выбору: предельные размеры — это результат расчёта по правилам, со стороны модели бюджет может корректироваться. Перед запуском в продакшен рекомендуем прогнать набор граничных тестов на APIYI apiyi.com с
quality: "low", чтобы с минимальными затратами проверить привычные вам комбинации размеров.
GPT Image 2.6 Sunburst GIF: быстрый старт
Минимальный пример GIF с GPT Image 2.6
Ниже — недорогой пример из справочных материалов: 2 кадра, по 100 мс на кадр, общая длительность 0,2 секунды. Генерируем зацикленную анимацию: жёлтый круг смещается вправо и возвращается на исходное место. frame_count и другие поля — специфичные для GIF; здесь мы просто отправляем JSON через requests — так нагляднее всего.
import base64, requests
resp = requests.post(
"https://api.apiyi.com/v1/images/generations",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"model": "gpt-image-2.6-sunburst",
"prompt": "A minimal two-frame looping animation of a yellow circle moving slightly right and returning to its starting position on a plain white background, no text, seamless loop.",
"output_format": "gif",
"quality": "low",
"size": "512x512",
"frame_count": 2,
"frame_duration_ms": 100,
"n": 1,
},
timeout=300,
)
resp.raise_for_status()
open("circle.gif", "wb").write(base64.b64decode(resp.json()["data"][0]["b64_json"]))
Когда пишете промпт, опишите три вещи: что за объект, как он движется и как замыкается цикл. Формулировки вроде «возвращается в исходное положение» или «seamless loop» помогают сделать стык первого и последнего кадров более естественным.
Предварительная проверка размеров GIF в GPT Image 2.6 и полная реализация
В production-окружении рекомендуется перед запросом выполнить локальную предварительную проверку — так вы заранее отсеете недопустимые размеры и сэкономите один round-trip, который иначе завершился бы ошибкой 400. В коде ниже таблица раскладок и ограничения из этой статьи оформлены в виде функций, совместимых и с интерфейсом генерации, и с интерфейсом редактирования.
Посмотреть полный код реализации (с предварительной проверкой размеров)
import base64
import requests
from typing import Optional
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.apiyi.com/v1" # совместимый с OpenAI интерфейс APIYI
MAX_EDGE = 3840
MAX_PIXELS = 8_294_400 # 3840 x 2160
MIN_PIXELS = 655_360 # около нижней границы по практическим замерам, только для предупреждения
MAX_RATIO = 3.0
def sheet_layout(frame_count: int) -> tuple[int, int]:
"""Возвращает фиксированную раскладку сетки (столбцы, строки) по числу кадров"""
if 2 <= frame_count <= 8:
return 4, 2
if frame_count == 9:
return 3, 3
if 10 <= frame_count <= 12:
return 4, 3
if 13 <= frame_count <= 16:
return 4, 4
raise ValueError("frame_count 必须在 2-16 之间,否则会被静默回退到 9 帧")
def check_gif_size(width: int, height: int, frame_count: int) -> list[str]:
"""Возвращает список проблем; пустой список означает, что пре-проверка пройдена"""
issues = []
if width % 16 or height % 16:
issues.append("宽高必须是 16 的倍数")
cols, rows = sheet_layout(frame_count)
sw, sh = cols * width, rows * height
total = sw * sh
if max(sw, sh) > MAX_EDGE:
issues.append(f"拼图 {sw}x{sh} 单边超过 {MAX_EDGE}")
if total > MAX_PIXELS:
issues.append(f"拼图总像素 {total:,} 超过 {MAX_PIXELS:,}")
if total < MIN_PIXELS:
issues.append(f"拼图总像素 {total:,} 低于约 {MIN_PIXELS:,},可能被拒")
if max(sw, sh) / min(sw, sh) > MAX_RATIO:
issues.append(f"拼图长短边比 {max(sw, sh) / min(sw, sh):.2f} 超过 3:1")
return issues
def create_gif(
prompt: str,
size: str = "512x512",
frame_count: int = 9,
frame_duration_ms: int = 200,
quality: str = "low",
image_url: Optional[str] = None,
out_path: str = "output.gif",
) -> str:
w, h = map(int, size.lower().split("x"))
problems = check_gif_size(w, h, frame_count)
if problems:
raise ValueError("尺寸预检未通过: " + "; ".join(problems))
payload = {
"model": "gpt-image-2.6-sunburst",
"prompt": prompt,
"output_format": "gif",
"quality": quality,
"size": size,
"frame_count": frame_count,
"frame_duration_ms": frame_duration_ms,
"n": 1,
}
endpoint = "images/generations"
if image_url: # эндпоинт редактирования: первое изображение становится основой анимации
endpoint = "images/edits"
payload["images"] = [{"image_url": image_url}]
resp = requests.post(
f"{BASE_URL}/{endpoint}",
headers={"Authorization": f"Bearer {API_KEY}"},
json=payload,
timeout=600,
)
if resp.status_code == 400:
raise RuntimeError(f"参数被拒(多为 size 超界): {resp.text}")
resp.raise_for_status()
item = resp.json()["data"][0]
if item.get("b64_json"):
data = base64.b64decode(item["b64_json"])
else:
data = requests.get(item["url"], timeout=120).content
with open(out_path, "wb") as f:
f.write(data)
return out_path
if __name__ == "__main__":
print(check_gif_size(768, 768, 16)) # ожидаем: общий бюджет пикселей превышен
print(check_gif_size(1280, 720, 9)) # ожидаем: [] — проверка пройдена
create_gif(
prompt="让这只猫跳一小段舞,纯色背景,固定镜头,最后一个动作回到起始姿势",
size="512x512",
frame_count=16,
frame_duration_ms=100,
image_url="https://example.com/cat.png",
out_path="cat_dance.gif",
)
### Проверка фактического количества кадров GIF в GPT Image 2.6 с помощью ffprobe
Если значение `frame_count` выходит за допустимые границы, происходит тихий откат к 9 кадрам. Поэтому в пакетных задачах лучше добавить отдельную проверку фактического количества кадров:
ffprobe -v error -count_frames -select_streams v:0 \
-show_entries stream=nb_read_frames -of csv=p=0 circle.gif
Минимальный пример должен вывести `2`. Если выводится `9`, значит параметр количества кадров не сработал — проверьте, что переданное значение находится в диапазоне от 2 до 16.
### Функциональные ограничения GPT Image 2.6 GIF
Режим GIF не поддерживает перечисленные ниже возможности — не передавайте их в запросе:
— `stream` — потоковый вывод и прогрессивный предпросмотр partial images
— настраиваемый `output_compression`
— `prompt_rewriter`
Кроме того, `frame_count` и `frame_duration_ms` используются только в GIF — не передавайте их в запросах PNG, JPEG, WebP или SVG.
> 🚀 **Быстрый старт**: рекомендуем зарегистрироваться на APIYI apiyi.com и воспользоваться бесплатной тестовой квотой для новых пользователей. Сначала прогоните весь процесс с параметрами 512×512, 2 кадра и `quality: «low»`, а затем постепенно увеличивайте количество кадров и размер. Платформа предоставляет OpenAI-совместимый интерфейс: одного API-ключа достаточно, чтобы вызывать GPT Image и другие популярные модели.
—
## Частые вопросы (FAQ)
Вопрос 1: что означает `size` при генерации GIF в GPT Image 2.6 Sunburst?
`size` — это размер каждого кадра, а не размер итогового склеенного изображения. При фактической проверке система выбирает раскладку в зависимости от числа кадров, вычисляет ширину, высоту и общее количество пикселей склеенного изображения, а затем сравнивает их с ограничениями: 3840 по длинной стороне, 8,294,400 пикселей суммарно и соотношение 3:1.
Вопрос 2: почему 1024×1024 в GPT Image 2.6 GIF не даёт сгенерировать ни одного кадра?
Потому что при любой раскладке оно выходит за границы. В раскладках 4×2, 4×3 и 4×4 ширина склеенного изображения составляет 4096, что больше 3840; в раскладке 3×3 получается 3072×3072, то есть 9,437,184 пикселей — сверх бюджета. Сообщение об ошибке обычно выглядит так: `No supported sheet fits … The longest edge must be less than or equal to 3840.` В этом случае достаточно уменьшить размер одного кадра до 960×960 или меньше.
Вопрос 3: почему при frame_count = 1 или 17 ошибки нет?
В текущей цепочке `frame_count` за пределами диапазона 2–16 не возвращает 400. Система просто отбрасывает и `frame_count`, и `frame_duration_ms`, откатываясь к значениям по умолчанию: 9 кадров и 1,8 секунды. Рекомендуем проверять диапазон на стороне клиента, а после генерации сверять фактическое число кадров через ffprobe.
Вопрос 4: если n больше 1, суммируется ли пиксельный бюджет в GPT Image 2.6?
В текущей цепочке каждое изображение проверяется отдельно, без суммирования. На практике 2 изображения × 16 кадров × 512² (в сумме 8,388,608) проходят успешно. Однако в официальном руководстве сказано, что несколько изображений тоже должны укладываться в один бюджет, поэтому в пакетных сценариях ориентируйтесь на фактический ответ и при необходимости разбивайте запрос на несколько вызовов с `n=1`.
Вопрос 5: как быстро вызвать GPT Image 2.6 Sunburst через API и сгенерировать GIF?
Рекомендуем такой порядок действий:
1. Зарегистрируйтесь на APIYI apiyi.com и получите API-ключ и бесплатную тестовую квоту
2. Укажите в коде из этой статьи `base_url` равным `https://api.apiyi.com/v1`
3. Проверьте цепочку на минимальном примере: 512×512, 2 кадра, `quality: «low»`, — а затем подстраивайте параметры по таблице размеров
Вопрос 6: может ли GPT Image 2.6 генерировать GIF на основе уже имеющихся изображений?
Да. `/v1/images/edits` тоже поддерживает `output_format: «gif»`: поместите эталонные изображения в поле `images`, первое изображение станет основой анимации, остальные параметры такие же, как у интерфейса генерации, и правила по размерам полностью совпадают. В промпте стоит явно указать «фиксированная камера» и «последнее движение возвращается в исходную позу» — тогда цикл получится плавнее.
Вопрос 7: изменятся ли приведённые в статье границы размеров?
Вполне возможно. Бюджет спрайт-листа — это измеренные параметры на 2026-11-09 в официальном прокси-канале: значение 8,294,400 проходит на верхней границе, а 12 кадров 832² отклоняются. На стороне модели эти границы могут меняться, поэтому в итоге ориентируйтесь на ошибку 400, которую возвращает API. Советую вынести константы из функции предварительной проверки в настраиваемые параметры, чтобы их можно было обновлять в любой момент.
—
## Ключевые выводы о размерах GIF в GPT Image 2.6 Sunburst
— **`size` — это размер одного кадра**: ограничение действует на общий спрайт-лист всех кадров, а не на отдельный кадр
— **Раскладка фиксирована по диапазонам**: четыре варианта — 4×2, 3×3, 4×3 и 4×4 — соответствуют 2–8, 9, 10–12 и 13–16 кадрам
— **Три жёстких ограничения**: одна сторона спрайт-листа ≤ 3840, общее число пикселей ≤ 8,294,400, соотношение длинной и короткой сторон ≤ 3:1
— **Самый надёжный размер — 512×512**: работает для всех 2–16 кадров; 768² — максимум 12 кадров, 960² — максимум 9 кадров
— **1024² полностью непригоден**: при переносе параметров из статичного изображения сначала нужно уменьшить размер
— **При выходе за диапазон количества кадров происходит тихий откат**: рекомендуется проверять диапазон на клиенте, а после генерации сверять число кадров через `ffprobe`
— **Недорогая проверка**: запускайте граничные тесты в APIYI apiyi.com с `quality: «low»` — так дешевле всего
—
## Итоги
Правила размеров для генерации GIF в GPT Image 2.6 Sunburst сводятся к трём шагам расчёта:
1. **Сначала определить раскладку**: по `frame_count` выбрать подходящую раскладку — 4×2, 3×3, 4×3 или 4×4.
2. **Затем рассчитать составное изображение**: умножить ширину и высоту одного кадра на количество строк и столбцов раскладки, чтобы получить ширину, высоту и общее число пикселей.
3. **В конце проверить**: убедиться, что соблюдены ограничения по каждой стороне, нижняя и верхняя границы общего числа пикселей и соотношение длинной и короткой сторон, а также что ширина и высота кратны 16.
В повседневном использовании 512×512 — самое совместимое значение по умолчанию; если нужно большое изображение, 9 кадров с 960×960 или 1280×720 позволяют полностью использовать доступный лимит. Если подключить функцию предварительной проверки из этой статьи к бизнес-коду, большинство ошибок 400 можно будет выявить локально заранее.
Рекомендуем быстро проверить комбинацию размеров через APIYI apiyi.com: платформа предоставляет бесплатный тестовый лимит и единый интерфейс, совместимый с OpenAI, — это удобно для граничного тестирования перед официальной интеграцией.
—
## 📚 Справочные материалы
1. **Центр документации APIYI — GPT Image 2.6: генерация GIF с циклической анимацией**: официальное описание параметров и проверенные на практике границы
— Ссылка: `docs.apiyi.com/api-capabilities/gpt-image-2/gpt-image-2-6`
— Описание: диапазоны параметров GIF, ограничения компоновки, примеры ошибок и использование интерфейса редактирования
2. **Официальная документация FFmpeg — ffprobe**: инструмент просмотра метаданных аудио, видео и GIF
— Ссылка: `ffmpeg.org/ffprobe.html`
— Описание: используется для проверки фактического числа кадров и длительности каждого кадра в сгенерированном GIF.
—
> **Автор**: Техническая команда APIYI
> **Техническая поддержка**: если возникнут проблемы с настройкой размеров GIF, свяжитесь с нами через главную страницу официального сайта APIYI — мы поможем с интеграцией.
