Как собрать GIF из кадров Seedream 5.5: проверенный локальный экспорт

Подготовьте последовательность PNG, проверьте порядок кадров и соберите GIF с заданным временем показа. Локальный экспорт проверен; генерация Seedream не тестировалась.

Зоотроп превращает последовательность оранжевых отметок в циклическое движение

Чтобы собрать GIF из изображений Seedream 5.5, сначала получите отдельные PNG с одинаковым кадрированием, а затем задайте их порядок и длительность показа в программе экспорта анимации. Прозрачное изображение, лист с несколькими позами и анимированный GIF — разные результаты. Просьба «сделать GIF» сама по себе не означает, что модель вернёт скачиваемую анимацию.

На странице Seedream 5.5 ByteDance показывает последовательность изображений бегущего персонажа на отдельных прозрачных слоях. Это основание попробовать покадровую сборку, но не подтверждение наличия встроенного GIF-эндпоинта, параметра количества кадров или определённых настроек экспорта в конкретном сервисе. В этой статье проверен локальный этап преобразования PNG в GIF на тестовом маркере, движение которого задано математически. Кадры примера созданы не в Seedream 5.5; приведённый ниже промпт — непроверенный исходный шаблон.

Скачайте и запустите рабочий пример

Архив с примером содержит исходные PNG, сведения об их происхождении, скрипт экспорта, генератор тестовых кадров, полученный GIF и отчёт проверки. Скрипты не вызывают модель и не отправляют файлы в сеть.

Понадобятся Python 3, библиотека Pillow и FFmpeg, доступный через PATH. Установите FFmpeg обычным для вашей системы менеджером пакетов. Распакуйте ZIP в новую рабочую папку и откройте в ней терминал: в папке должны быть видны export_gif.py и fixture/. На macOS или Linux установите Pillow и запустите пример:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install Pillow
python export_gif.py fixture output --fps 10 --matte '#fff8ee'

В Windows вместо строки source активируйте виртуальное окружение командой .venv\Scripts\activate либо запускайте Python непосредственно из этого окружения.

В проверенной среде использовался FFmpeg 9.0.2. Версия установленной программы и свойства результата сохраняются в report.json. Для первого запуска удобно установить текущую версию Pillow без фиксации номера. Для регулярно повторяемого рабочего процесса зафиксируйте версию, прошедшую ваши проверки.

Папка для результата не должна существовать до запуска. Это защищает уже принятую анимацию от случайной перезаписи. Исходные кадры остаются неизменными. Если неудачный запуск оставил папку с FAILED.txt, разберите причину ошибки и для следующей попытки выберите другую папку результата.

Результат локального экспорта: оранжевый тестовый маркер движется по замкнутой траектории

Фактический результат локального экспорта кадров, нарисованных кодом. Это не генерация Seedream; простота примера ничего не говорит о визуальном качестве модели.

В нашем запуске получился GIF размером 320 × 180 пикселей с 12 закодированными кадрами, общей длительностью 1 200 мс и значением loop 0, которое в метаданных GIF означает бесконечное повторение. Размер файла — 6 366 байт. Эти значения относятся к небольшому тестовому набору, а не описывают ожидаемый размер или качество детальной анимации персонажа.

Определите движение до запроса изображений

В задании на анимацию нужны действие, неподвижный ориентир и переход от конца к началу. «Милый маскот, красивое освещение» описывает стиль, но не движение. Решите, что меняется между кадрами, а что остаётся неизменным: размер холста, положение камеры, масштаб персонажа, линия опоры, палитра и отличительные детали внешности.

Для первого цикла выберите одно простое действие, например короткое приветственное движение рукой. Не объединяйте поворот, прыжок, движение камеры, смену реквизита и подвижный фон. Чем больше изменений, тем сложнее отличить запланированное движение от непреднамеренных изменений при генерации. Шести разных поз может хватить для передачи идеи, но шесть кадров не гарантируют плавность. Восприятие движения зависит от времени показа и расстояния между позами.

Перед использованием промпта убедитесь, что сервис действительно предлагает Seedream 5.5 и выдаёт необходимые файлы. При проверке каталога Ofox 10 ноября 2026 года мы нашли 5.0 Pro и Flash, но не 5.5. Подробности — в руководстве по версиям и доступу. Нельзя подменять модель похожей версией и подписывать результат как 5.5.

Ниже — полное исходное задание для сервиса, в котором доступ уже подтверждён:

Create a six-pose sequence for a short looping wave by the character
in my reference. Keep the camera fixed and use the same full canvas,
character scale, foot baseline, clothing and colors in every pose.

Pose order:
0 — neutral, arm resting;
1 — arm lifting;
2 — hand raised and tilted left;
3 — hand raised and tilted right;
4 — arm lowering;
5 — almost neutral, positioned to transition back to pose 0.

The face, torso, feet and background framing should remain stable.
Only the waving arm and hand should move. Avoid new objects or text.
Return separate PNG images with transparent backgrounds if this
service supports that export. Do not draw a checkerboard background.
If only a contact sheet is available, use an exact 3-column × 2-row
grid with equal cells, no gutters, no labels and no outer border.

Сохраните вместе промпт, название выбранной модели, референс и скачанные оригиналы. Если интерфейс не выдаёт шесть отдельных кадров или аккуратный лист с позами, не рассчитывайте, что проблему решит скрытый параметр API. Используйте доступные варианты экспорта либо другой способ с проверенной выдачей анимации.

Разделите позы, сохранив выравнивание

Для каждого кадра сохраняйте полный холст одинакового размера. Если отдельно обрезать каждую картинку по непрозрачному содержимому, неподвижный персонаж может начать прыгать: положение рисунка относительно начала координат изменится, хотя поза должна оставаться на месте. На всех кадрах используйте одинаковые границы обрезки и масштаб.

Если сервис выдал отдельные файлы, переименуйте их в нужном порядке движения:

frames/
  frame-000.png
  frame-001.png
  frame-002.png
  frame-003.png
  frame-004.png
  frame-005.png

Перед переименованием просмотрите изображения. Порядок скачивания не обязательно совпадает с порядком поз. Не сортируйте кадры по размеру файла и не считайте присвоенные сервисом имена указанием хронологии.

Если результат — единый лист, до нарезки проверьте фактическую сетку. Макет 3 × 2 с неравными ячейками или заголовком вокруг них не является готовым спрайт-листом. В редакторе изображений или конвертере спрайт-листов задайте реальные границы ячеек и проверьте каждый извлечённый кадр. Равная по размеру нарезка не исправит рисунок, пересекающий границу ячейки. В руководстве по GIF в Image 2.6 есть отдельно проверенный пример преобразования листа с указанием его источника; это не доказательство генерации исходного листа в Seedream.

Сохраняйте исходное разрешение, пока не проверите выравнивание. Уменьшение всех кадров до обнаружения ошибки обрезки может скрыть дефект в предпросмотре и затруднить последующее исправление.

Выберите фон под место размещения

PNG может содержать частичную прозрачность. Прозрачность GIF устроена на основе палитры и не сохраняет такие же плавные значения альфа-канала. Слабое свечение, край стекла или сглаженные волосы после преобразования в прозрачный GIF могут выглядеть иначе. Смена расширения файла не сохраняет эти свойства.

Наш скрипт выбирает предсказуемый вариант: до квантования цветов и кодирования GIF он накладывает каждый кадр на явно заданный цвет подложки. Кремовый фон по умолчанию — дизайнерский выбор, а не прозрачный результат. Для белого фона задайте --matte '#ffffff' либо укажите фактический цвет страницы. Если GIF должен работать на разных фонах, этот способ может не подойти.

Когда нужна настоящая частичная прозрачность, сохраните последовательность PNG и проверьте формат анимации с поддержкой альфа-канала в целевом приложении. Возможные альтернативы — APNG и анимированный WebP, но их поддержка зависит от редактора, системы публикации и проигрывателя. Не обещайте совместимость с чатом или рекламной площадкой без проверки. Руководство по прозрачным PNG поможет отличить полезный альфа-канал от нарисованного фона.

Документация Pillow по GIF описывает длительность кадров, зацикливание и способы удаления предыдущего кадра перед показом следующего. Это справочник по формату, а не спецификация генерации Seedream.

Настройте время и проверьте стык цикла

При 10 кадрах в секунду каждый кадр показывается 100 мс. Двенадцать кадров дают 1,2 секунды. Скрипт допускает только 5, 10, 20, 25 или 50 fps, чтобы длительность каждого кадра точно выражалась в сотых долях секунды — единицах GIF. Это ограничение нашего скрипта, а не Seedream.

Переход от последнего кадра к первому так же важен, как переходы внутри цикла. Если последняя поза сильно отличается от первой, повторение покажет заметный рывок. Если первый и последний кадры одинаковы и каждый удерживается полный интервал, возникает лишняя пауза. Иногда она нужна; оценивайте готовую анимацию, а не следуйте универсальному правилу.

В примере 12 положений маркера расположены на замкнутой траектории; начальная позиция не повторяется в конце. Пример проверяет порядок и время показа, а не естественность движения персонажа. Для своей последовательности сначала просмотрите лист кадров и сравните внешность персонажа, затем воспроизведите анимацию в целевом размере. Статичный лист не показывает неудачный ритм.

Что проверяет скрипт, а что остаётся оценить вам

Скрипт требует PNG с последовательной нумерацией, одинаковые размеры, не менее двух кадров и хотя бы какие-то различия между ними. Он отклоняет существующую папку результата и слишком большие кадры до преобразования. После кодирования снова открывает GIF и проверяет наличие нескольких кадров, ожидаемую общую длительность и бесконечное повторение. Хеши исходников сохраняются для последующего сравнения.

При кодировании используются фильтры создания и применения палитры FFmpeg. Они помогают получить общую палитру для всей последовательности, но не восстанавливают потерянные детали и не исправляют несогласованные позы. Кодировщик GIF может объединить одинаковые кадры, сохранив их суммарную длительность. Поэтому число закодированных кадров не всегда равно числу исходных файлов.

Результаты проверок локального преобразования PNG в GIF

Скриншот нашего локального отчёта на английском языке. Он подтверждает проверку файлов и результат экспорта, а не работу интерфейса модели или генерацию Seedream.

ПроблемаЧто проверить сначалаСледующий шаг
Видно только одно изображениеДекодировать скачанный файл и посчитать кадрыНайти отдельные исходные кадры или настоящий экспорт анимации
Персонаж скачетРазмер холста, общую точку отсчёта и обрезкуВыровнять кадры на одинаковом холсте до кодирования
Появился белый прямоугольникБыл ли в PNG альфа-канал и какая подложка выбранаПроверить прозрачность, затем выбрать подходящий фон или формат
Края выглядят грубоПреобразование палитры и альфа-канала, размер предпросмотраСохранить PNG-оригиналы и проверить результат на целевом фоне
На повторе заметен рывокРазницу между последней и первой позамиИзменить позы или время показа, а не имя файла
Запрос модели завершился ошибкойТочную модель, сервис и поддерживаемый формат запросаИспользовать руководство по ошибкам API изображений; не переносить GIF-параметры другой модели

Готовый результат — не просто файл с расширением .gif: он воспроизводится на нужной площадке, показывает требуемое действие, сохраняет внешность персонажа, имеет приемлемые края и укладывается в ограничение размера файла. Храните редактируемые кадры рядом с конечным экспортом. Если важнее получить GIF непосредственно от модели, чем собирать кадры, воспользуйтесь сравнением Seedream 5.5 и Image 2.6, чтобы выбрать способ с проверенным форматом результата.

Можно открыть Ofox Chat, подготовить задание на движение и поработать с доступными инструментами изображений. Это общая ссылка на чат, а не подтверждение доступности Seedream 5.5. До расходования кредитов проверьте модель и варианты экспорта.

Скрипт намеренно ограничен: максимум 16 миллионов пикселей на кадр и 64 миллиона пикселей на всю входную последовательность. Более крупные материалы уменьшите или разделите до запуска. Это небольшой локальный инструмент, а не промышленный пакетный кодировщик.