О структуре

Структура, как и весь пакет, представляет собой иерархическую модель вложенных групп и шаблонов использующих язык JSON (JavaScript Object Notation).

Сначала мы разберем развёрнутый пример создания структуры, а далее пройдемся по её основным частям:

  1. Группы - Контейнеры для шаблонов или иных групп.
  2. Шаблоны - Описание элементов шаблона и самого файла.
  3. Элементы - Детали конкретного элемента шаблона (композиции / секвенции или аудио-файла / пресета).

Для создания структуры пакета нам потребуются все эти части (работа с группами, шаблонами и элементами) - дабы создать единую связку с файлами предварительного просмотра, кодом пакета и шаблонами (или же аудио-файлами, пресетами).

Тезис: Процесс написания структуры пакета - это описание деталей файла шаблона и его элементов в вид кода (с правилами которое требует расширение).

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

Пример создания структуры

note

Данный пример будет для After Effects, но также подойдет для иных программ, у которых есть композиции / секвенции (шаблоны).

Для примера: представим, что у нас имеется уже сохраненный шаблон для After Effects (.AEP формат - Minimal.aep), в котором 6 композиций с именами (Minimal 1 ...Minimal 6).

Ae Project Items

Теперь возникают вопросы:

  1. Как перенести его в структуру пакета?
  2. Каким образом указать файлы предварительного просмотра для каждого элемента (композиции)?
  3. Куда поместить файл шаблона?

На эти вопросы мы и попытаемся получить ответы ниже.


Создадим вот такую структуру нашего шаблона (на основе наших композиций и их имён):

warning

Названия групп, шаблонов и элементов допустимо писать только на латинице без спец.символов (!@#$%^&*+=~`'"\|/)

Пример структуры
"structure": {
"Minimal": {
"preview": {
"ML_1": {"enabled": true, "name": "Minimal 1", "options": false, "custom_args": {}},
"ML_2": {"enabled": true, "name": "Minimal 2", "options": false, "custom_args": {}},
"ML_3": {"enabled": true, "name": "Minimal 3", "options": false, "custom_args": {}},
"ML_4": {"enabled": true, "name": "Minimal 4", "options": false, "custom_args": {}},
"ML_5": {"enabled": true, "name": "Minimal 5", "options": false, "custom_args": {}},
"ML_6": {"enabled": true, "name": "Minimal 6", "options": false, "custom_args": {}}
}
}
}

Описание структуры (код)

Шаблон с названием Minimal (подразумевается файл формата .AEP - но не указывается), внутри которого блок preview (благодаря которому группа стала шаблоном), и перечисление наших элементов (композиций).

Для файлов предварительного просмотра:

Учитывая текущую структуру: ваши файлы предварительного просмотра (внутри папки Atom Preview Assets) должны находится в дополнительной папке Minimal (используется имя шаблона для папки, однако это можно изменить благодаря параметрам настройки группы элементов, а именно параметр custom_folder ).
У вас должны быть файлы двух типов (GIF/PNG) для каждого элемента, с именами идентификаторов (ML_1 ...ML_6) которые указаны в структуре (однако вместо имен идентификаторов можно использовать имена элементов, но для этого нужно добавить специальную настройку для группы элементов, а именно параметр preview_name_instead_id).

Для файла шаблона:

Ваш файл шаблона (.AEP) - должен иметь название Minimal.aep и находится внутри папки Atom After Effects.
Несмотря на название Minimal в структуре, вы можете использовать файл шаблон с иным названием (смотрите подробнее в настройках группы элементов, а именно параметр aep_file_name).

Рассмотрим визуальный пример расположения файлов для написанной структуры:
Structure of package files

Данный пример полностью работоспособен, и вы можете проверить свой пакет в тестовом режиме прямо сейчас (помните, что код структуры это только часть кода - пакет это все части кода в одном файле).

Example Test Pack
Чтобы окончательно проверить работу структуры - попробуйте применить любой элемент, если это будет успешно, то расположение файла шаблона верно (а так как мы видим файлы предварительного просмотра - значит и их расположение верно).


Усложняем структуру

Давайте добавим в наш пакет еще один шаблон для After Effects (файл шаблона: Typo.aep) в котором на этот раз 4 композиции с именами (Stomp 1 ...Stomp 4).

Ae Project Items 2

На этот раз мы поместим наш шаблон (в структуре пакета), в дополнительную группу Typography.

Пример структуры
"structure": {
"Minimal": {
"preview": {
"ML_1": {"enabled": true, "name": "Minimal 1", "options": false, "custom_args": {}},
"ML_2": {"enabled": true, "name": "Minimal 2", "options": false, "custom_args": {}},
"ML_3": {"enabled": true, "name": "Minimal 3", "options": false, "custom_args": {}},
"ML_4": {"enabled": true, "name": "Minimal 4", "options": false, "custom_args": {}},
"ML_5": {"enabled": true, "name": "Minimal 5", "options": false, "custom_args": {}},
"ML_6": {"enabled": true, "name": "Minimal 6", "options": false, "custom_args": {}}
}
},
"Typography": {
"Stomp": {
"preview": {
"STM_1": {"enabled": true, "name": "Stomp 1", "options": false, "custom_args": {}},
"STM_2": {"enabled": true, "name": "Stomp 2", "options": false, "custom_args": {}},
"STM_3": {"enabled": true, "name": "Stomp 3", "options": false, "custom_args": {}},
"STM_4": {"enabled": true, "name": "Stomp 4", "options": false, "custom_args": {}},
},
"preview_name_instead_id": true,
"custom_folder": "MySpace",
"aep_file_name": "Typo.aep"
}
}
}

Описание структуры (код):

Шаблон с названием Stomp (отличается от фактического Typo.aep) который находится в дополнительной группе Typography, внутри шаблона так же идёт блок preview, и на этот мы используем настройки группы элементов для шаблона (через запятую после блока preview).

Настройки групп элементов позволяют изменять параметры для целой группы элементов (после блока preview), и в нашем случае мы меняем следующее:

  1. preview_name_instead_id - позволяет использовать имена элементов вместо ID для файлов предварительного просмотра.
  2. custom_folder - позволяет использовать папку с иным названием для файлов предварительного просмотра (как вы помните, имя папки должно соответствовать иерархии указанной в структуре).
  3. aep_file_name - позволяет использовать другое имя файла шаблона вместо указанного в структуре (по умолчанию указанное название в структуре - должно так же являться файлом шаблона).

Для файлов предварительного просмотра:

Теперь наши файлы предварительного просмотра (для шаблона Stomp, шаблон Minimal мы не трогали) должны быть сначала в папке Typography, внутри которой папка с названием нашего шаблона Stomp.
Однако, как вы помните: выше мы использовали специальный параметр для настройки групп элементов (custom_folder), благодаря которому сменили название папки для файлов предварительного просмотра с Stomp на MySpace (без этого параметра мы бы использовали папку Stomp по умолчанию).
А также всё благодаря тем же настройка группы элементов (preview_name_instead_id) теперь нам нужно использовать имена элементов вместо их идентификационных значений: тоесть теперь, вместо (STM_1 ...STM_4) нам нужно использовать имена (Stomp 1 ...Stomp 4) для файлов (GIF/PNG).

Для файла шаблона:

Мы условились, что название файла шаблона изначально как Typo.aep, однако в структуре указано Stomp - а значит расширение будет искать шаблон с названием Stomp.aep (теперь уже внутри дополнительной папки Typography).
Однако благодаря специальным настройка группы элементов (aep_file_name), мы вновь изменили это и указали иное название нежели в структуре - теперь будет использован файл Typo.aep (несмотря на структуру в которой шаблон указан как Stomp).
Таким образом, добавилась папка Typography (внутри которой должен быть файл шаблона), иное название шаблона для файла, и собственное название в структуре (которое будет указано в меню расширения).

Рассмотрим визуальный пример расположения файлов для написанной структуры (включая прошлый код для Minimal):
Structure of package files 2

В тестовом режиме расширения это будет выглядеть вот так:

Example Test Pack 2

note

Если вы захотите добавить еще групп внутри группы и поместить туда свои шаблоны / файлы предварительного просмотра - вам вновь придется создать папки для добавленных групп (соблюдая иерархию вложенности) по аналогии что есть выше.


Полный код проанализированной структуры

В нашем примере мы использовали только блок structure, однако весь пакет состоит из двух основных блоков - settings и structure (смотрите подробнее в создании файла пакета).
А потому вот полный код нашего примера (включая часть settings и открывающийся блок {}).

{
    "settings": {
        "main": {
            "name" : "Great Typography",
            "version" : "1.0",
            "required_app_version": "3.0",
            "software_id" : "AE",
            "software_version" : "CC18",
            "engine_pack" : "_COMPOSER",
            "inside_security" : "",
            "required_purchase_code" : false,
            "cc_author_username" : "aniom"
        },
        "inside_option_sets": {
"auto_size_composition": "ONLY_MAIN",
            "auto_fps_composition": "NONE",
            "duplicate_origin_setting": "ALL_COMPS"
        },
        "stylization": {
            "header_color_hex": "#021523"
        }
    },
"structure": {
"Minimal": {
"preview": {
"ML_1": {"enabled": true, "name": "Minimal 1", "options": false, "custom_args": {}},
"ML_2": {"enabled": true, "name": "Minimal 2", "options": false, "custom_args": {}},
"ML_3": {"enabled": true, "name": "Minimal 3", "options": false, "custom_args": {}},
"ML_4": {"enabled": true, "name": "Minimal 4", "options": false, "custom_args": {}},
"ML_5": {"enabled": true, "name": "Minimal 5", "options": false, "custom_args": {}},
"ML_6": {"enabled": true, "name": "Minimal 6", "options": false, "custom_args": {}}
}
},
"Typography": {
"Stomp": {
"preview": {
"STM_1": {"enabled": true, "name": "Stomp 1", "options": false, "custom_args": {}},
"STM_2": {"enabled": true, "name": "Stomp 2", "options": false, "custom_args": {}},
"STM_3": {"enabled": true, "name": "Stomp 3", "options": false, "custom_args": {}},
"STM_4": {"enabled": true, "name": "Stomp 4", "options": false, "custom_args": {}},
},
"preview_name_instead_id": true,
"custom_folder": "MySpace",
"aep_file_name": "Typo.aep"
}
}
}
}

Далее вы найдете полную информацию по работе с группами, шаблонами и их элементами в структуре пакета.