Terrastruct открыла код TALA, алгоритма авторазметки диаграмм D2

Terrastruct открыла исходный код TALA (Terrastruct's AutoLayout Algorithm), алгоритма автоматической раскладки диаграмм, который компания разрабатывала для своего языка и инструмента D2. Код опубликован под той же лицензией, что и сам D2, MPL-2.0. TALA уже встроен в D2 версии 0.9.0: включить его можно флагом --layout=tala при установке D2, либо опробовать прямо в браузере на play.d2lang.com, который работает полностью на стороне клиента.
TALA, это ортогональный алгоритм раскладки, спроектированный специально под архитектурные диаграммы: он выстраивает связи под прямыми углами, что больше похоже на то, как схемы рисуют на доске, а не на DAG-раскладки (растущие строго в одном направлении), которые дают два других движка D2, Dagre и ELK. Алгоритм сочетает идеи из нескольких научных работ по визуализации графов (ссылки приведены прямо в исходном коде) с собственными наработками команды и одновременно оптимизирует несколько критериев «эстетичности», симметрию, медианную длину связей, направление потока, группировку похожих узлов и другие.
Автор поста показывает три группы примеров. Первая, семь сравнений TALA с Dagre и ELK на реальных публичных D2-файлах из открытых репозиториев на GitHub (не отобранных вручную специально в пользу TALA). Вторая, оригинальные, вымышленные композиции, где демонстрируется уникальная черта TALA: координаты и размеры отдельных узлов можно зафиксировать вручную. По словам автора, это особенно удобно для агентных сценариев: ИИ-модели неплохо расставляют объекты в двумерном пространстве, но всё ещё плохо справляются с прокладкой связей между ними (routing), эту часть работы TALA берёт на себя. Третья группа показывает гибридный режим: часть узлов задаётся координатами вручную, а остальные и все контейнеры автоматически размещает сам движок. Всего во второй и третьей группах, одиннадцать таких композиций, отрисованных TALA.
Автор прямо перечисляет и компромиссы TALA. Во-первых, в алгоритме есть элемент случайности: по умолчанию он перебирает 3 случайных сида и выбирает вариант с лучшей оценкой; при одинаковых сидах и одинаковом входе результат воспроизводится точно, но стоит добавить всего один узел, и вся раскладка может измениться полностью, тогда как Dagre и ELK в такой ситуации почти не меняют прежнюю картину, просто вписывая новый узел (это иногда даже желательно). Во-вторых, TALA хуже справляется с классическими DAG-графами, автор признаётся, что для длинных «текущих» графов сам чаще предпочитает Dagre или ELK. В-третьих, на больших диаграммах TALA может работать заметно дольше, а время выполнения растёт нелинейно; сравнение производительности с другими движками вынесено в отдельный репозиторий d2-benchmarks и в самом тексте поста числами не приводится.
Автор благодарит за существенный вклад в TALA Гэвина Нисидзаву (Gavin Nishizawa) и отдельно, Жулио Сезара Батисту (Júlio César Batista) за работу над алгоритмами иерархии. Дата открытия кода и выхода D2 v0.9.0 в тексте не указана.
Ключевые факты
- Terrastruct открыла код TALA, алгоритма ортогональной авторазметки диаграмм для D2, под лицензией MPL-2.0, той же, что у самого D2.
- TALA уже встроен в D2 v0.9.0: подключается флагом --layout=tala или доступен в веб-плеере play.d2lang.com.
- Уникальная возможность TALA, фиксировать координаты и размеры отдельных узлов вручную и комбинировать это с автоматической раскладкой; автор называет это удобным для агентных сценариев, где модели хорошо расставляют объекты в 2D, но плохо прокладывают связи.
- У алгоритма есть рандомизация: по умолчанию перебираются 3 сида, и добавление одного узла может полностью изменить всю раскладку, в отличие от Dagre и ELK, которые меняются постепенно.
- TALA хуже справляется с классическими DAG-графами и медленнее (нелинейно) работает на больших диаграммах по сравнению с Dagre и ELK; численных бенчмарков в самом посте нет, есть ссылка на отдельный репозиторий.
Почему это важно
D2, популярный инструмент для описания диаграмм кодом («diagrams as code»), и до сих пор его фирменный алгоритм авторазметки TALA оставался закрытым, доступным только как часть D2, но не изучаемым и не дорабатываемым сообществом. Публикация кода под MPL-2.0 открывает движок для стороннего аудита, доработки и переиспользования отдельно от D2. Отдельно значим акцент на агентных сценариях: TALA явно спроектирован так, чтобы ИИ-модели могли задавать часть раскладки координатами, а сложную геометрию связей оставлять алгоритму, это конкретный пример того, как разработчики инструментов подстраивают архитектуру под работу с ИИ-агентами.
Кому это важно
Разработчикам и командам, которые уже используют D2 для архитектурных и системных диаграмм, у них появляется больше контроля и прозрачности над тем, как строится раскладка. Авторам инструментов и агентов, генерирующих диаграммы через ИИ, гибридный режим TALA (часть узлов вручную, часть автоматически) прямо адресован таким сценариям. Контрибьюторам open source, код теперь можно изучать, форкать и дополнять.
Как это применить
TALA бесплатна и уже входит в D2 версии 0.9.0: достаточно установить D2 и указать флаг --layout=tala, чтобы включить именно этот движок раскладки вместо Dagre или ELK по умолчанию. Проверить эффект без установки можно в браузере на play.d2lang.com, который рендерит диаграммы полностью на стороне клиента. Для гибридных сценариев можно вручную закрепить координаты и размеры только у части узлов (например, задать конкретную форму группы элементов), а остальную раскладку, включая контейнеры, доверить TALA.
Можно ли доверять
Источник, официальный блог Terrastruct, компании-разработчика D2 и TALA, пост написан от первого лица создателем алгоритма; конкретное имя автора в самом тексте не названо. Материал технический, без маркетинговых преувеличений: автор прямо перечисляет не только сильные стороны TALA, но и её ограничения и компромиссы по сравнению с существующими движками Dagre и ELK, а тестовые примеры первой группы называет невыбранными вручную специально в пользу TALA, это повышает доверие к описанию.
Риски и подводные камни
Рандомизация в алгоритме означает, что небольшое изменение диаграммы (добавление одного узла) может привести к совершенно другой раскладке, в отличие от Dagre и ELK, где прежняя структура в целом сохраняется. Для классических DAG-графов, растущих в одном направлении, TALA по признанию самого автора уступает Dagre и ELK. На больших диаграммах время работы TALA растёт нелинейно, то есть с ростом сложности схемы производительность может просесть заметнее, чем у конкурирующих движков; точных цифр в самом посте не приведено, только ссылка на отдельный бенчмарк-репозиторий.
«Добавьте всего один узел, и диаграмма может выглядеть совершенно по-другому. У Dagre и ELK раскладка в этом случае почти не меняется: новый узел просто вписывается в прежнюю картину.»
— разработчик TALA, блог Terrastruct