TALA 图表布局算法正式开源
继此前的公告之后,TALA(Terrastruct 的自动布局算法)现已开源,采用与 D2 相同的许可证(MPL-2.0)。
TALA 是一种新颖的自动布局算法,专为软件架构图设计。它本质上是一个正交布局引擎,更接近人们在白板上画图的风格,而不是那种朝单一方向生长的 DAG 式布局。它融合了多篇图绘制研究论文中的思路(源代码中附有引用),并结合原创技术来生成美观的图表。它考量了“美观”的多个维度,包括对称性、中位距离、流向、同类节点的聚簇等等。
废话不多说,直接上例子。
- 第一批是用 TALA 与 D2 自带的另外两种布局算法 Dagre 和 ELK 渲染的对比图。这些并非刻意挑选的例子,只是从 GitHub 上找来的公开 d2 文件。所以其中某些图表,你完全可能更偏好非 TALA 的布局效果。
- 第二批展示 TALA 的一个独特能力:节点的位置和大小可以自定义,比如锁定坐标。这特别适合 agentic 场景——AI 模型在二维空间中摆放节点没问题,但连线布线仍然力不从心,而 TALA 恰好能接手这一部分。这些例子由 AI 生成。
- 第三批展示 TALA 支持混合布局的能力:部分节点指定坐标,其余交给布局引擎处理。如果你对某组节点的形状有明确想法,可以用坐标指定,剩下的交给 TALA。同样,这批也是 AI 生成的。
另外请注意,TALA 也并非没有取舍。
- 算法带有随机性。它默认使用 3 个随机种子分别计算布局,然后选择得分最高的那个。相同的种子和输入会生成相同的图表,但哪怕只多加一个节点,整体布局也可能面目全非。而在 Dagre 和 ELK 中,图表基本保持原样,只是兼容了新增节点。有时后者才是你想要的效果。
- 它不擅长 DAG。每当我想要一张纵向延伸的长流程图时,往往还是更倾向于用 Dagre 或 ELK。
- 对于较大的图表,运行时间会显著增加,且随规模非线性增长。关于 TALA 与其他引擎的运行时性能基准对比,参见 https://github.com/d2lang/d2-benchmarks。
TALA 已内置于 D2 v0.9.0,安装后只需加上 --layout=tala 即可上手体验!也可以直接打开 https://play.d2lang.com,完全在浏览器端运行,无需任何服务端支持。开源之后能带来哪些改进,我特别期待,也迫不及待想看社区会贡献哪些新想法和优化。
特别感谢 Gavin Nishizawa 在 TALA 各模块中的大量贡献,以及 Júlio César Batista 在层级算法等方面的工作。和你们一起攻克这些有趣的问题,真的非常开心。
第一批:对比
Fulcro RAD 架构
并排对比TALADagreELKD2 源码 ↓点击图表可放大查看。每种布局已自动缩放至适配所在面板。
Mocha 安全飞地 SoC
并排对比TALADagreELKD2 源码 ↓点击图表可放大查看。每种布局已自动缩放至适配所在面板。
在 AWS EKS 上运行 Jupyter
并排对比TALADagreELKD2 源码 ↓点击图表可放大查看。每种布局均已缩放以适配面板。
Lion Reader 前端数据流
并排对比TALADagreELKD2 源码 ↓点击图表可放大查看。每种布局均已缩放以适配面板。
ROSS 转子动力学工作流
并排对比TALADagreELKD2 源码 ↓点击图表可放大查看,各布局已自适应缩放至对应面板。
Go Queue 工作队列架构
并排对比TALADagreELKD2 源码 ↓点击图表可放大查看,各布局已自适应缩放至对应面板。
Ouroboros Leios 模拟器
并排对比TALADagreELKD2 源码 ↓点击图表可放大查看。每种布局已按面板尺寸自动缩放。
第二批:自定义定位
Signal House
Atlas / Data platform
Night shift / Mission control
周五部署:密室逃脱
互联网是一只水母
轨道咖啡物流
云端音乐学院
Velvet Rope
Synthwave City
第三批:部分定位
The Printing Room
固定:四个 CMYK 工位共享相同的固定 top 坐标,left 坐标等距分布,使印刷工序保持机械对齐。
自动:TALA 自动排列供纸、相机、套准控制、烘干、印前及后工序节点,均未设置 top 或 left。
查看定位声明查看 D2 源码MULE / Utility Rover
固定:四个电机组件分别固定于底盘矩形的前后四角。
自动:TALA 将所有控制器、传感器、电源及安全节点布置在这些固定点之间或周围,并自动安排未指定位置的 fleet 容器。
查看定位声明查看 D2 源码七组布局对比使用的图示来自 D2 的 real-world fixtures 公开项目。 每组对比使用相同的 D2 源码与同一版本的编译器构建,仅更换布局引擎。 源码样式、主题及显式网格约束均保持不变。部分 fixture 中的图标已被替换为内置图形。
各面板中的 SVG 独立缩放以适配尺寸。点击打开 SVG可在更大尺寸下查看标签与连接细节。
来源与许可证 ·
渲染设置与版本
十一个定位示例为原创虚构作品,使用同一公开版本的 D2 构建通过 TALA 渲染。 图标下载包含完整源码及本地向量资源。两个部分定位示例仅对列出的固定节点应用 top/left, 其余所有节点及每个容器均由 TALA 自动放置。
定位渲染设置
。