Мой блог
Как разработчик превратил создание промороликов для macOS-приложения в код
Регулярный выпуск вертикальных видео для продвижения десктопного софта требует больших трудозатрат, особенно если главный герой проекта — виртуальный питомец со сложным поведенческим циклом. В данном случае процесс создания промороликов с участием анимированного персонажа Mewmori перенесли в программный код. Вместо ручной записи через дебаг-панель разработчик настроил пайплайн, где сценарий ролика описывается в формате JSON, а специальный скрипт управляет виртуальным экраном, запуском отладочной сборки и захватом видеопотока.






Такой подход позволяет вносить изменения в реплики или действия персонажа простым редактированием текстовой строки в репозитории с последующим перезапуском скрипта. Всего в проекте было подготовлено несколько десятков раскадровок и готовых видеофайлов, превративших съемочный процесс в стандартную процедуру сборки.
Автоматизация съёмки роликов через JSON-раскадровки
Регулярный выпуск вертикальных видео для продвижения десктопного софта требует больших трудозатрат, особенно если главный герой проекта — виртуальный питомец со сложным поведенческим циклом. В данном случае процесс создания промороликов с участием анимированного персонажа Mewmori перенесли в программный код. Вместо ручной записи через дебаг-панель разработчик настроил пайплайн, где сценарий ролика описывается в формате JSON, а специальный скрипт управляет виртуальным экраном, запуском отладочной сборки и захватом видеопотока.

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

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

Особенности захвата кадров и звукового сопровождения
Для корректной обрезки видеоматериала приложение фиксирует текущие геометрические границы собственных окон с учетом их видимости и уровня прозрачности. Ввиду аппаратных особенностей захвата экрана отсчет таймингов производится с конца файла на основе точных данных из отчета. Звуковые эффекты, генерируемые программно внутри проекта, записываются путем временного переключения системного вывода аудио на виртуальное устройство с помощью вспомогательного скрипта на CoreAudio, после чего уровень громкости нормализуется до требуемых стандартов.
Практические сложности и типичные ошибки
Реализация автоматизированного пайплайна потребовала решения ряда специфических задач, связанных с поведением виртуального персонажа и окружения macOS. Например, опечатки в названиях клипов в раскадровке не вызывают критический сбой приложения, а приводят лишь к молчаливому бездействию персонажа на видео. Для предотвращения подобных дефектов были внедрены автоматические тесты, проверяющие соответствие текстовых сценариев доступным каталогам графических спрайтов и одежды.

Исправление сбоев анимации и окружения
В ходе настройки автоматизации разработчик столкнулся с несколькими характерными проблемами:
- Избыточная ширина кадра при перемещении персонажа на значительные расстояния корректировалась ограничением допустимого диапазона движения в вертикальной ориентации.
- Начальная позиция кота зависела от его состояния в предыдущем сеансе, поэтому перед началом записи теперь выполняется принудительный телепорт в стартовую точку.
- Конфликты с сохранением гардероба привели к необходимости собирать внешний вид персонажа с нуля перед каждым дублем.
- Некорректная загрузка релизной версии вместо отладочной теперь предотвращается предварительной проверкой идентификатора бандла в файле Info.plist.
- Проблемы с системной раскладкой клавиатуры при отправке команд через AppleScript были решены переходом на позиционные коды клавиш.
Итоги внедрения программного пайплайна
В результате интеграции съемочного процесса в структуру репозитория проморолики стали полноценным артефактом сборки, который можно легко контролировать через систему контроля версий или обновлять после изменения дизайна интерфейса. Аналогичным образом с помощью вспомогательных скриптов автоматизировано создание пресс-материалов и скриншотов. Несмотря на значительный объем написанного кода и необходимость отладки редких краевых случаев, такой подход существенно сокращает время на подготовку визуального контента для приложения.

