Автоматический рендер видео в After Effects через API

API превращает шаблоны After Effects и данные в готовые видео на управляемой рендер-ферме.

Область
Медиа, автоматизация видеопроизводства
Наша роль
Архитектура, бэкенд и воркфлоу, скрипты для After Effects, интеграция рендер-фермы, фронтенд
Год
2025

Мы построили облачный API, который собирает готовые MP4 из шаблонов Adobe After Effects и структурированных данных — без моушн-дизайнера в процессе. Платформа ведёт весь путь: регистрацию шаблона, загрузку ассетов, генерацию футажа с помощью AI, рендер на удалённых Windows-нодах и выдачу результата через S3-совместимое хранилище. Каждый шаг отслеживается, показывает прогресс и может быть перезапущен.

Задача

  • Короткие ролики с AI-ведущим, B-roll, музыкой и переходами делались вручную: дизайнер открывал проект, менял футаж, правил тайминг и экспортировал каждое видео.
  • Рендерить можно только на лицензированных Windows-машинах, к которым приходится подключаться через интернет и прокси.
  • Дизайнеры постоянно меняют композиции, поэтому структуру слоёв нельзя зашивать в бэкенд.
  • Рендер идёт минутами и может упасть на скачивании, рендере или выгрузке — при этом машина не должна остаться занятой, а задача — зависнуть.
  • Часть исходников генерируют внешние AI-сервисы, которые работают асинхронно и медленно.

Решение

Шаблон в системе — это типизированный контракт: проект .aep, скрипт ExtendScript и список слоёв (видео, фото, аудио, данные) с пометкой «обязательный» или «необязательный». Задача заполняет этот контракт футажом и настройками слоёв, и API не запустит рендер, пока не заполнены все обязательные слои. Сам рендер — это устойчивый воркфлоу на Inngest из отдельных шагов с контрольными точками: выделить ноду, разложить ассеты, отрендерить, выгрузить, освободить ноду. Внутри After Effects скрипт читает параметры задачи и сам собирает композиции, поэтому один проект даёт много разных видео. По желанию весь ролик собирается из одного запроса: LLM пишет план и идеи для B-roll, сервис аватаров записывает озвучку, text-to-video модель параллельно генерирует клипы.

Архитектура

Архитектура: облачный API и движок воркфлоу управляют Windows-нодами рендера по SSH, медиа идёт напрямую через S3
Архитектура: облачный API и движок воркфлоу управляют Windows-нодами рендера по SSH, медиа идёт напрямую через S3

Что умеет система

API шаблонов и задач
Создание и редактирование шаблонов и слоёв, загрузка файлов напрямую в хранилище по presigned-ссылкам, задачи с настройками каждого слоя: тайминг, трансформации, прозрачность, громкость, переходы.
Рендер одним запросом
POST /render/{job_id} ставит задачу в очередь, а результат приходит ссылкой на скачивание, которая действует 7 дней.
Прогресс в три фазы
Загрузка ассетов, рендер и выгрузка результата показывают свой процент, который берётся с ноды в реальном времени.
Управление рендер-нодами
Ноды добавляются и удаляются через API или админский CLI, SSH-доступ проверяется при добавлении, а монитор раз в минуту проверяет их доступность.
Генерация ролика целиком
План контента, видео с аватаром, идеи и параллельная генерация B-roll, сборка слоёв, рендер и выгрузка — в одном воркфлоу.
Веб-приложение
React-приложение, которое работает и как Telegram Mini App: шаблоны, задачи, генерация аватара и B-roll, монтажный таймлайн, рендер и просмотр.

Инженерные решения

  • Каждый этап рендера — отдельный шаг Inngest с контрольной точкой: упавший шаг повторяется сам по себе, а уже выполненные не запускаются заново. Ошибки, которые повтор не исправит, например отсутствующий файл проекта, помечаются как неповторяемые.
  • Если любой шаг падает, компенсирующий шаг освобождает ноду и переводит задачу в статус failed — упавший рендер никогда не держит машину занятой.
  • Бэкенд управляет Windows-хостами по асинхронному SSH: создаёт рабочую папку задачи, пишет манифест nexrender, запускает CLI и построчно разбирает его вывод, чтобы показывать живой прогресс. У каждого удалённого вызова есть таймаут.
  • Тяжёлое медиа не проходит через API: ноды сами скачивают исходники и выгружают MP4 в S3-совместимое хранилище по короткоживущим presigned-ссылкам.
  • Медленные AI-сервисы опрашиваются с фиксированным интервалом и жёстким таймаутом; B-roll генерируется параллельно, не больше четырёх клипов на видео, чтобы держать расходы под контролем.

Интерфейс

Схемы

Жизненный цикл задачи: от заполнения слоёв до готового MP4, включая освобождение ноды при ошибке
Жизненный цикл задачи: от заполнения слоёв до готового MP4, включая освобождение ноды при ошибке
Три поколения платформы: от прототипа на Node.js до Render API с генерацией контента
Три поколения платформы: от прототипа на Node.js до Render API с генерацией контента

Стек

  • Python
  • FastAPI
  • PostgreSQL
  • SQLAlchemy
  • Inngest
  • asyncssh
  • Adobe After Effects
  • ExtendScript
  • nexrender
  • FFmpeg
  • S3-compatible storage
  • React
  • TypeScript
  • Docker

Что это показывает

  • Десктопный After Effects превращён в headless-сервис с API, который собирает видео без ручной работы дизайнера.
  • Дизайнеры меняют шаблоны без правок в бэкенде: контракт слоёв и скрипты внутри After Effects развязывают креатив и код.
  • Облачный control plane надёжно управляет удалённой Windows-фермой с повторами, компенсацией и отчётом о прогрессе.
  • Несколько AI-сервисов — LLM, аватары и text-to-video — собраны в один конвейер с ограничением расходов.

Вопросы по кейсу

Нужно ли переписывать бэкенд, когда дизайнер меняет шаблон?

Нет. Бэкенд передаёт в After Effects только параметры слоёв, а композиции и слои собирает скрипт ExtendScript внутри проекта. Дизайнер может править шаблон без изменений в коде.

Что происходит, если рендер падает посреди задачи?

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

Можно ли рендерить на своих машинах?

Да. Рендер-ферма — это пул Windows-машин с After Effects и nexrender CLI, которые регистрируются через API или CLI. Платформа подключается к ним только по SSH, поддерживает прокси и отправляет задачи только на исправные ноды.