Goblinmine/homelab-diagram
运维与部署把 YAML 格式的 homelab 清单渲染成 r/homelab 风格的网络拓扑图,输出 SVG 和 PNG。
项目用途
homelab-diagram 读取一份描述家庭实验室的 YAML 文件,生成类似 r/homelab 版上常见风格的大型网络拓扑图。图上包括从互联网经运营商路由器、防火墙到核心交换机的链路,每个交换机端口及其 VLAN 标记,以线宽表示协商速率的网线,带型号、IP、主机名和系统的设备卡片,Proxmox 主机及其虚机/容器,TrueNAS 存储池和磁盘占用,以及 DMZ 容器及其 CT ID README。
作者明确说明这不是通用工具:内容来自 inventory.yaml,但布局(每个框、端口和连线的坐标)是在 build.py 里为某一套网络手工放置的,换一套网络需要改坐标。可以先看示例输出判断是否符合需要。
工作原理
build.py 按手写坐标绘制 SVG,嵌入图标,再用 rsvg-convert 转成 PNG;部分文本宽度用 Pillow 按真实字体测量,使标签和徽章不溢出。默认会把真实域名替换成 redacted.com、SSID 改成通用名称,方便公开发布;--unredacted 则直接渲染清单里的真实值,供自己使用。
快速使用
依赖:Python 3 与 PyYAML(Pillow 可选,但标签宽度更准)、用于 PNG 输出的 librsvg 中的 rsvg-convert,以及能通过 fontconfig 找到的 Fira Sans 和 Fira Code 字体。Arch/CachyOS 上:pacman -S python-yaml python-pillow librsvg ttf-fira-sans ttf-fira-code;Debian/Ubuntu 上:apt install python3-yaml python3-pil librsvg2-bin fonts-firacode,再另装 Fira Sans。
克隆后执行:
python3 fetch_icons.py # 下载服务图标到 icons/,只需一次
python3 build.py # → out/homelab.svg + out/homelab.png(打码版)
python3 build.py --unredacted # → out/homelab-unredacted.svg + .png(真实值)
服务图标不在仓库里,由 fetch_icons.py 从 homarr-labs/dashboard-icons 下载;仓库只附带作者自己画的 CPU、内存、SSD 等小图标。
改成自己的图
- 改写
inventory.yaml:文字、IP、端口、VLAN 颜色和容器分组都来自这里。 - 渲染后看哪里放不下,回到
build.py调坐标;README 指出顶部区域和服务器卡片内分栏对应的变量为fy, fh、ox, oy、bx, by、DY、MAD。 - 新图标把 SVG 放进
icons/,在清单里引用文件名即可。
仓库还带一份写给 AI 编程代理的 CLAUDE.md,说明代码结构、哪些布局是硬编码的,以及渲染后检查的迭代流程。作者建议的用法是:用 Claude Code 打开仓库,让它按你的网络改写 inventory.yaml 和 build.py 并反复看渲染结果。
使用限制
- 布局是针对单套网络硬编码的,适配过程是改代码,不是填配置。
- 生成 PNG 需要 librsvg 和指定的 Fira 字体,且 fontconfig 必须能找到字体。
- 代码和自带图标为 MIT 许可(LICENSE);服务图标来自另一个项目,商标归各项目所有;字体为 SIL Open Font License(Fira)。
- README 说明代码由 AI 在 Claude Code 中编写,作者描述了约 60 轮反馈和迭代。
HotRepo 点评
HotRepo 在 2026-11-08 的新项目榜中记录到该项目 100 stars、4 forks,增长窗口为 2026-11-07 至 2026-11-08;它没有进入 GitHub 全语言日榜,目前也只有这一条快照,因此数据只能说明早期关注,谈不上趋势。更有参考价值的是作者的坦白:这是一个偏个人、手工调坐标的脚本,因为产出的图有人喜欢而被问起。对愿意改 build.py 的人来说,作为起点是合理的;想找开箱即用的网络绘图工具,它并不合适。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。