TALA 现已开源
摘要
TALA, Terrastruct 的自动布局算法,现已采用 MPL-2.0 许可证开源,并与 D2 v0.9.0 捆绑发布,为创建美观的软件架构图提供了一种新颖的方法。
暂无内容
查看缓存全文
缓存时间: 2026/09/08 00:33
# TALA 开源发布
来源: https://d2lang.com/blog/tala-is-open-source
继此前公告(https://d2lang.com/blog/d2-non-profit/)之后,TALA(Terrastruct 自动布局算法)现已采用与 D2 相同的许可证(MPL-2.0)开源。
TALA 是一种新颖的自动布局算法,专为软件架构图设计。这意味着它主要是一个正交布局引擎,其效果更接近白板绘图,而非单向生长的有向无环图(DAG)布局。它融合了多篇图形绘制研究论文(引用见源代码)的思路与原创技术,以生成美观的图表。算法考量了“美观性”的多重目标,包括对称性、中值距离、流程、相似节点聚集等。
为简洁起见,我将直接展示示例。
- 第一批对比展示了 TALA 与 D2 内置的另外两种布局算法(Dagre 和 ELK)生成的图表。这些图表并非精心挑选,而是来自 GitHub 上的公开 D2 文件。因此,对于某些图表,您可能更倾向于非 TALA 布局。
- 第二批展示了 TALA 的一项独特属性:节点的位置和尺寸可自定义,例如锁定坐标。这对于智能体应用场景尤其适用——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/?layout=tala&script=7Jjfb-JGEMff_VeMLs8YWJOGbqVK6fWqVsq1dyRVXipFY--AVzG7vt11I3rif6_8C2xwCknjpJV4ifES5vPd-eUdn8G1zkxEHGLnUsuHw4V0cRb6kV4OFzpBtRh8ySijYfk3THQ4ZHjxbThFjIJvCCO8OJ_O55P5-WTM5lE4mZ6HI3YhxPl0KJe4IDucJ_phMAp8wbwzuJIRKUscPv5y8x1YIph9uLy6u_1tdvWjvxS-dwaXAlOHTmrF4SaWRgxSNG4FMtLKgqE0wYgEPEgXQ5jJxA2kggRDSkiAjTEl63uekIai0oiRi9h5XmbJjMYcfi-u8NWD8r85pGSsVvm9WyXEi68AllniZJrfO5NRsRTqRDRu51q5gZV_EQc29QDW3rrCsArD-sUEFSboFzOpMJPeMJFWDqUic5caLbKIzF0eqmsyf8qIqmjthXSHfRDkATi096Nx_YvWzzvF71lt2Q1YsbZuWWd9WS9qkMPn_AJXMjRoVt2of7LKpvWaTBIOsVa0EvRQoYpLHQMOn6pPG8s7oA5U1xa2uE-Y4gpvY5m2vhik6BwZxWFhUKqGdSPIDAwKmVkO0xaDw1IrXS2tOyIxhsH3pdf87ZY-qGIFbtDed3sPlVyiI3F0oNi0A87eAv5IKbFtKbFTKZ1K6VRKR5WSQIchWuIwk2rxh_ohm8_JNB-C0SqRSpA5vn6qMLYjlUhF1tsLRiFCu5jMnXXaEId37-DrLkunGEm34jCqnWZISMthll9q1-zpfVKmB6yx1kqWLd2_aIfOYBhKt_zCYYZhqN3Hz20tRfheSsiGqtBZDr9e3lz3SHt0263-m59Xs2V1lLnV5n5z7jy131dqv3UIOLyvPv3v2m_Z9-qN5J2wjvzPqETSa_d9hM2OYD_vyLItGbYpmdOJZWM96NX6pNdyH41PBX98wY_YyVtP8Nb4LRvkaPy8FvlCdLZPD96UPumdvva8szx5VflIqN_t5Qo63yT5dUa8N4SuoaulqkPT8S_8DrBZj-zgMTbrf9-TA-ye9t3t6faImCvbTnDX-QDVvwjWIaIxwfnboei_IqicFbsGyx1kY-QJ_g2xnNCeCawD2k67xqTlt8-sHH4iF8Uv6-dDIpi_-1zoRUZXXh2SxF5RUp5ZT9FzRErsQruTZDfb3kLE3wMA&,该站点完全在客户端运行。我尤其期待开源带来的改进,并迫不及待地想看到社区提交的改进方案与创意。
特别感谢 Gavin Nishizawa 在 TALA 各方面的大量贡献,以及 Júlio César Batista 在层次结构算法等方面的工作。与你们共事如此有趣的事物,实在令人愉快。
## 第一批:对比 (https://d2lang.com/blog/tala-is-open-source#batch-1-comparisons)
### Fulcro RAD 架构 (https://d2lang.com/blog/tala-is-open-source#fulcro-rad-architecture)
选择图表可放大查看。每种布局均已缩放以适应其面板。
### Mocha 安全区域片上系统 (https://d2lang.com/blog/tala-is-open-source#mocha-secure-enclave-soc)
选择图表可放大查看。每种布局均已缩放以适应其面板。
### AWS EKS 上的 Jupyter (https://d2lang.com/blog/tala-is-open-source#jupyter-on-aws-eks)
选择图表可放大查看。每种布局均已缩放以适应其面板。
### Lion Reader 前端数据流 (https://d2lang.com/blog/tala-is-open-source#lion-reader-frontend-data-flow)
选择图表可放大查看。每种布局均已缩放以适应其面板。
### ROSS 转子动力学工作流 (https://d2lang.com/blog/tala-is-open-source#ross-rotor-dynamics-workflow)
选择图表可放大查看。每种布局均已缩放以适应其面板。
### Go Queue 工作器架构 (https://d2lang.com/blog/tala-is-open-source#go-queue-worker-architecture)
选择图表可放大查看。每种布局均已缩放以适应其面板。
### Ouroboros Leios 模拟器 (https://d2lang.com/blog/tala-is-open-source#ouroboros-leios-simulator)
选择图表可放大查看。每种布局均已缩放以适应其面板。
## 第二批:自定义定位 (https://d2lang.com/blog/tala-is-open-source#positioning-with-top-and-left)
### 信号屋 (https://d2lang.com/blog/tala-is-open-source#signal-house)
信号屋 (https://d2lang.com/blog/tala-layouts/positioning/signal-house/tala.svg)查看 D2 源代码### 阿特拉斯/数据平台 (https://d2lang.com/blog/tala-is-open-source#atlas--data-platform)
阿特拉斯/数据平台 (https://d2lang.com/blog/tala-layouts/positioning/atlas-data-platform/tala.svg)查看 D2 源代码### 夜班/任务控制中心 (https://d2lang.com/blog/tala-is-open-source#night-shift--mission-control)
夜班/任务控制中心 (https://d2lang.com/blog/tala-layouts/positioning/night-shift/tala.svg)查看 D2 源代码### 周五部署:密室逃脱 (https://d2lang.com/blog/tala-is-open-source#friday-deploy-the-escape-room)
周五部署:密室逃脱 (https://d2lang.com/blog/tala-layouts/positioning/friday-deploy/tala.svg)查看 D2 源代码### 互联网是一只水母 (https://d2lang.com/blog/tala-is-open-source#the-internet-is-a-jellyfish)
互联网是一只水母 (https://d2lang.com/blog/tala-layouts/positioning/internet-jellyfish/tala.svg)查看 D2 源代码### 轨道咖啡物流 (https://d2lang.com/blog/tala-is-open-source#orbital-coffee-logistics)
轨道咖啡物流 (https://d2lang.com/blog/tala-layouts/positioning/orbital-coffee/tala.svg)查看 D2 源代码### 云端温室 (https://d2lang.com/blog/tala-is-open-source#cloud-conservatory)
云端温室 (https://d2lang.com/blog/tala-layouts/positioning/cloud-conservatory/tala.svg)查看 D2 源代码### 天鹅绒绳 (https://d2lang.com/blog/tala-is-open-source#velvet-rope)
天鹅绒绳 (https://d2lang.com/blog/tala-layouts/positioning/velvet-rope/tala.svg)查看 D2 源代码### 合成波城市 (https://d2lang.com/blog/tala-is-open-source#synthwave-city)
合成波城市 (https://d2lang.com/blog/tala-layouts/positioning/synthwave-city/tala.svg)查看 D2 源代码## 第三批:部分定位 (https://d2lang.com/blog/tala-is-open-source#partial-positioning)
### 印刷室 (https://d2lang.com/blog/tala-is-open-source#the-printing-room)
印刷室 (https://d2lang.com/blog/tala-layouts/positioning/printing-room/tala.svg)**固定节点:**四个 CMYK 工作站共享固定的顶部坐标和等距的左侧坐标,使印刷顺序保持机械对齐。
**自动节点:**TALA 定位送纸器、相机、套准控制器、烘干机、印前和印后工序节点;这些节点均未指定顶部或左侧坐标。
查看定位声明查看 D2 源代码### MULE/多用途探测车 (https://d2lang.com/blog/tala-is-open-source#mule--utility-rover)
MULE/多用途探测车 (https://d2lang.com/blog/tala-layouts/positioning/robot-chassis/tala.svg)**固定节点:**四个电机组件固定在底盘矩形的前后角落。
**自动节点:**TALA 将所有控制器、传感器、电源和安全节点放置在这些角落之间或周围,并安排未定位的探测车容器。
查看定位声明查看 D2 源代码## 来源与渲染详情
七组布局对比使用了来自 D2 真实场景测试用例(https://github.com/d2lang/d2/pull/2871)的公开项目图表。每组对比使用相同的 D2 源文件和编译器构建版本,仅更改布局引擎。源样式、主题和显式网格约束均得以保留。部分测试用例图标已替换为内置形状。
SVG 文件按比例独立缩放以适应每个面板。使用**打开 SVG**可在更大尺寸下检查标签和连接线。
来源出处与许可证 (https://d2lang.com/blog/tala-layouts/REAL_WORLD.md)
渲染设置与修订版本 (https://d2lang.com/blog/tala-layouts/render-manifest.json)
十一个定位示例均为原创虚构组合,使用相同的公开 D2 构建版本通过 TALA 渲染。图标下载包含完整源代码和本地矢量素材。两个部分定位示例仅对所列固定节点应用了顶部/左侧坐标;所有其他节点和每个容器均由 TALA 自动放置。
定位渲染设置 (https://d2lang.com/blog/tala-layouts/positioning/render-manifest.json)
相似文章
refactoringhq/tolaria
Tolaria 是一款免费、开源的桌面应用,支持 macOS、Windows 和 Linux,用于管理 Markdown 知识库,重点关注可移植性、Git 版本控制、离线使用和 AI 集成。
我构建了一个用于AI代理的2.5D可视化编译器:它将拓扑与几何分离,使LLM不再生成杂乱的图表。
一个用Go编写的开源2.5D图表引擎,它将拓扑与几何分离,使LLM能够生成清晰的架构图,而不会出现空间幻觉。
Tangle – 可视化机器学习流水线编辑器
Tangle 是一个开源的可视化机器学习流水线编辑器,支持通过拖放功能协作构建机器学习工作流,兼容任何语言或框架。
bytedance/UI-TARS-desktop
ByteDance 发布了 TARS,这是一个多模态 AI 智能体技术栈,包含 Agent TARS(基于 CLI/Web UI 的通用 AI 智能体,支持 GUI、浏览器和终端任务)和 UI-TARS Desktop(由 UI-TARS 模型驱动的原生桌面应用,用于本地和远程计算机/浏览器自动化)。该技术栈将多模态 LLM 与 MCP 工具相结合,实现类人任务处理能力。
开源表格模型验证工具包TanML寻求反馈 [D]
TanML是一个采用MIT许可的自动化模型验证工具包,专为表格机器学习模型设计,适用于受监管环境。开发者希望就其功能和报告获得反馈。