Haiku Animator

Haiku Animator выступает как инструмент визуальной разработки анимаций, ориентированный на генерацию структурированных анимационных описаний, совместимых с Lottie. Его ключевая ценность заключается в преобразовании дизайнерских сцен и таймлайнов в JSON-структуры, которые могут быть воспроизведены в браузере через библиотеку Lottie Web без потери семантики анимации.

Lottie Web в этом контексте выступает рантаймом, а Haiku Animator — авторской средой, формирующей декларативное описание движения, трансформаций и временных зависимостей.

Архитектурная связка Haiku Animator и Lottie Web

Связка строится вокруг единого принципа: анимация описывается как дерево состояний во времени, а не как императивная последовательность команд.

Haiku Animator формирует промежуточное представление:

  • сцены (scenes)
  • слои (layers)
  • ключевые кадры (keyframes)
  • трансформации (transform)
  • параметры интерполяции

После экспорта формируется JSON-структура, близкая по формату к Lottie, но с возможными расширениями или промежуточными сущностями.

Lottie Web выполняет строго определённую роль:

  • парсинг JSON-анимации
  • интерпретация временной шкалы
  • отрисовка через Canvas или SVG
  • управление воспроизведением (play, pause, stop)

Структура анимации, формируемой Haiku Animator

Экспортируемая модель обычно сводится к следующей логической структуре:

  • композиция (composition)
  • слои (layers)
  • ресурсы (assets)
  • временные диапазоны (in/out points)
  • интерполяции ключевых кадров

Пример упрощённой структуры:

{
  "v": "5.7.0",
  "fr": 60,
  "ip": 0,
  "op": 120,
  "layers": [
    {
      "ty": 4,
      "nm": "Shape Layer",
      "ks": {
        "o": { "a": 0, "k": 100 },
        "p": {
          "a": 1,
          "k": [
            { "t": 0, "s": [0, 0, 0] },
            { "t": 60, "s": [200, 0, 0] }
          ]
        }
      }
    }
  ]
}

В Haiku Animator подобные структуры формируются автоматически на основе визуального таймлайна.

Модель слоёв и временной шкалы

Ключевой концепцией является слой как независимая анимационная единица.

Каждый слой содержит:

  • геометрию (shape, image, text)
  • трансформации (position, scale, rotation, opacity)
  • временные ключи
  • маски и эффекты (в ограниченном виде)

Временная шкала задаётся через:

  • ip — начало анимации
  • op — конец анимации
  • fr — частота кадров

Haiku Animator интерпретирует таймлайн как непрерывную функцию изменения параметров, что напрямую транслируется в keyframe-модель Lottie.

Интерполяция и поведение ключевых кадров

Основная сложность при переходе от Haiku Animator к Lottie Web заключается в интерполяции.

Используются типы:

  • линейная интерполяция
  • bezier-кривые
  • stepped interpolation (резкие переключения)

В JSON это отражается через контрольные точки:

{
  "t": 30,
  "s": [100, 100],
  "e": [300, 100],
  "i": { "x": [0.42], "y": [0] },
  "o": { "x": [0.58], "y": [1] }
}

Haiku Animator часто визуализирует эти кривые как графическое управление easing-функциями.

Интеграция Lottie Web в JavaScript-окружение

Lottie Web подключается как runtime-библиотека, ответственная за воспроизведение экспортированных анимаций.

Базовая модель использования строится вокруг контейнера и конфигурационного объекта.

import lottie from "lottie-web";

const animation = lottie.loadAnimation({
  container: document.getElementById("animation"),
  renderer: "svg",
  loop: true,
  autoplay: true,
  path: "/animations/haiku-export.json"
});

В случае экспорта из Haiku Animator путь path указывает на сгенерированный JSON.

Режимы рендеринга

Lottie Web поддерживает несколько стратегий отрисовки:

SVG-рендеринг

Используется для векторных сцен. Обеспечивает:

  • масштабируемость без потерь
  • DOM-интеграцию
  • возможность стилизации через CSS

Ограничение заключается в высокой нагрузке при сложных композициях.

Canvas-рендеринг

Используется для:

  • высокой производительности
  • сложных сцен с большим количеством слоёв

Результат отрисовывается в bitmap-форме, что снижает гибкость пост-стилизации.

HTML-рендеринг

Используется редко, в основном для текстовых и DOM-ориентированных анимаций.

Поведение ассетов и ресурсов

Haiku Animator часто формирует отдельный блок assets, который Lottie Web интерпретирует как внешние ресурсы:

  • изображения
  • шрифты
  • символы (precompositions)

Пример:

{
  "assets": [
    {
      "id": "image_0",
      "w": 512,
      "h": 512,
      "u": "images/",
      "p": "img_0.png"
    }
  ]
}

Связь между слоями и assets осуществляется через идентификаторы.

Управление анимацией через API Lottie Web

После загрузки анимации управление осуществляется через объект instance.

Основные операции:

animation.play();
animation.pause();
animation.stop();
animation.goToAndStop(30, true);
animation.setSpeed(1.5);
animation.setDirection(-1);

Haiku Animator не управляет этим уровнем напрямую, но экспортирует структуру, которая делает возможной подобную манипуляцию.

Событийная модель

Lottie Web предоставляет события жизненного цикла анимации:

animation.addEventListener("complete", () => {});
animation.addEventListener("loopComplete", () => {});
animation.addEventListener("enterFrame", () => {});

В контексте Haiku Animator такие события соответствуют логическим границам таймлайна, заданным в редакторе.

Особенности экспорта Haiku Animator

Экспорт в Lottie-совместимый формат сопровождается рядом преобразований:

  • flattening композиции
  • нормализация координат
  • преобразование easing-кривых
  • оптимизация слоёв
  • удаление редакторских метаданных

Некоторые расширенные эффекты Haiku Animator могут быть:

  • упрощены до базовых трансформаций
  • или разложены на несколько ключевых кадров

Ограничения совместимости

Несмотря на близость моделей, не все возможности Haiku Animator напрямую транслируются в Lottie Web:

  • сложные выражения (expressions)
  • нестандартные эффекты фильтров
  • некоторые виды процедурной анимации
  • динамическая генерация геометрии во время исполнения

Lottie Web работает исключительно с заранее описанной декларативной моделью.

Оптимизация производительности

При работе с экспортами Haiku Animator важны следующие аспекты:

  • минимизация количества keyframes
  • ограничение числа одновременно активных слоёв
  • использование SVG только при умеренной сложности
  • кэширование JSON-анимаций
  • избегание избыточных вложенных precompositions

Lottie Web чувствителен к глубине иерархии композиции, особенно при SVG-рендеринге.

Модель времени и синхронизация

Вся система построена на дискретной временной сетке:

  • каждый кадр соответствует фиксированному времени
  • интерполяция происходит между ключевыми точками
  • скорость воспроизведения влияет на пересчёт времени, а не на структуру данных

Haiku Animator формирует таймлайн, который затем становится независимым от реального времени объектом, интерпретируемым runtime-движком.

Связь декларативной модели и runtime-исполнения

Haiku Animator оперирует декларативным описанием поведения:

  • что должно произойти
  • в какой момент времени
  • с какими параметрами

Lottie Web превращает это описание в вычисляемый процесс:

  • интерпретация состояния на каждом кадре
  • отрисовка результата
  • управление жизненным циклом анимации

Эта архитектурная разделённость обеспечивает переносимость анимаций между средами исполнения без изменения логики движения.