关于 graph-colorize
graph-colorize 是一项技能,可修改 Obsidian 的 graph.json,按标签、文件夹、可见性或自定义映射为图谱节点着色。它会先备份文件,并保留其他图谱设置。
主要功能
- 01按标签、类别或可见性为节点着色
- 02组合可见性与标签着色
- 03应用明确的自定义颜色映射
- 04编辑前备份设置
- 05除颜色组外保留其他设置
适用场景
- 01区分 Obsidian 图谱中的主题
- 02突出显示内部或 PII 页面
- 03为知识库文件夹设置稳定颜色
- 04颜色调整后恢复图谱设置
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ar9av/ obsidian-wiki --skill graph-colorize安装后在 Claude Code 中输入/graph-colorize确认已加载。
详细介绍
Graph Colorize — 为 Obsidian 图谱视图添加颜色编码
你将重写 $OBSIDIAN_VAULT_PATH/.obsidian/graph.json,让 Obsidian 的图谱视图按标签、文件夹或可见性为节点着色。
Obsidian 将图谱设置存储在 <vault>/.obsidian/graph.json 中。colorGroups 数组由一系列 {query, color} 对组成;每个节点使用第一个匹配的查询。查询使用 Obsidian 搜索语法:tag:#foo、path:"concepts"、file:foo 等。颜色格式为 {"a": 1, "rgb": <packed-int>},其中整数为 (R << 16) | (G << 8) | B。
开始之前
- 解析配置 — 按照
llm-wiki/SKILL.md中的 Config Resolution Protocol 操作(内联@name覆盖 → 沿 CWD 向上查找.env→ 全局配置 → 提示设置)。由此获取OBSIDIAN_VAULT_PATH。 - 确认
$OBSIDIAN_VAULT_PATH/.obsidian/存在。如果不存在,说明该 vault 从未在 Obsidian 中打开过 — 告诉用户先在 Obsidian 中打开一次该 vault,然后重新运行。 - 如果 Obsidian 可能处于打开状态,请提醒用户:Obsidian 关闭时会覆盖
graph.json。告诉用户先关闭该 vault,或者做好重新加载(Cmd/Ctrl+R)的准备,并在重新加载前不要改动图谱设置。
步骤 1:选择模式
根据用户的表述推断模式。如果不明确,默认使用 by-tag。
| 用户意图 | 模式 |
|---|---|
| “按标签着色”、“为我的图谱着色”、“让它更丰富多彩”(默认) | by-tag |
| “按文件夹着色”、“按类别着色”、“按目录着色” | by-category |
| “突出显示可见性”、“在图谱中显示 internal/pii”、“可见性颜色” | by-visibility |
用户提供了明确映射(tag:#foo = red 或 JSON 块) | custom |
| “组合标签和可见性” / “两者都要” | combined(先可见性,再标签) |
步骤 2:构建 colorGroups 数组
调色板(10 种易于色盲人士区分的颜色)
按顺序使用。如果分组数量超过颜色数量,可循环使用并在第二轮将亮度降低约 20%;也可以限制为 10 组,并告知用户其余标签将共用“其他”颜色。
| # | Hex | rgb(打包整数) | 角色 |
|---|---|---|---|
| 0 | #4E79A7 | 5142951 | 蓝色 |
| 1 | #F28E2B | 15896107 | 橙色 |
| 2 | #E15759 | 14767961 | 红色 |
| 3 | #76B7B2 | 7780786 | 蓝绿色 |
| 4 | #59A14F | 5873999 | 绿色 |
| 5 | #EDC948 | 15583048 | 黄色 |
| 6 | #B07AA1 | 11565217 | 紫色 |
| 7 | #FF9DA7 | 16751527 | 粉色 |
| 8 | #9C755F | 10253663 | 棕色 |
| 9 | #BAB0AC | 12234924 | 灰色 |
每种颜色都包装为 {"a": 1, "rgb": <int>}。
模式:by-tag
- 对
$VAULT_PATH/**/*.md执行 glob,排除_archives/、_raw/、.obsidian/、node_modules/、index.md、log.md、_insights.md。 - 从每个页面解析 frontmatter 中的
tags。统计每个标签的使用次数。 - 从频率列表中移除
visibility/*标签 — 这些是保留的系统标签,仅由by-visibility或combined模式处理。 - 按使用次数取排名最高的 10 个标签。如果唯一标签少于 10 个,则全部使用。
- 对于索引为
i的标签T:输出{"query": "tag:#T", "color": palette[i]}。 - 可选:在末尾追加一个用于未标记页面的兜底条目:
{"query": "-[\"tag\":]", "color": palette[9]}— 如果颜色槽 9 已分配给实际标签,则跳过。
模式:by-category
按以下固定顺序使用 vault 的七个顶层文件夹,以确保不同运行之间颜色稳定:
| 文件夹 | 颜色索引 |
|---|---|
concepts | 0(蓝色) |
entities | 1(橙色) |
skills | 2(红色) |
references | 3(蓝绿色) |
synthesis | 4(绿色) |
projects | 5(黄色) |
journal | 6(紫色) |
对每个存在且至少包含一个 .md 文件的文件夹输出一个条目。每个条目的格式为:
{"query": "path:\"<folder>\"", "color": {"a": 1, "rgb": <int>}}
模式:by-visibility
按以下顺序恰好输出三项(按首次匹配生效,因此限制性最强的项放在最前面):
visibility/pii→#E15759(红色,rgb 14767961)visibility/internal→#F28E2B(橙色,rgb 15896107)visibility/public→#59A14F(绿色,rgb 5873999)
{"query": "tag:#visibility/pii", "color": {"a": 1, "rgb": 14767961}}
没有 visibility/ 标签的页面保留 Obsidian 的默认颜色——不要添加兜底项。
模式:combined
先输出 by-visibility 项,再输出 by-tag 项。发生冲突时,以 visibility 为准,因为它在列表中靠前。
模式:custom
如果用户给出了明确映射,照原样使用。将用户提供的任何十六进制值(例如 #FF00FF)转换为打包整数,方法是 int(hex_without_hash, 16)。将每项封装为 {"a": 1, "rgb": <int>}。
第 3 步:合并到 graph.json(不要覆盖其他内容)
-
读取现有的
$VAULT_PATH/.obsidian/graph.json。如果文件不存在,则使用以下最简默认值:{ "collapse-filter": true, "search": "", "showTags": false, "showAttachments": false, "hideUnresolved": false, "showOrphans": true, "collapse-color-groups": false, "colorGroups": [], "collapse-display": true, "showArrow": false, "textFadeMultiplier": 0, "nodeSizeMultiplier": 1, "lineSizeMultiplier": 1, "collapse-forces": true, "centerStrength": 0.518713248970312, "repelStrength": 10, "linkStrength": 1, "linkDistance": 250, "scale": 1, "close": true } -
先备份:写入前将现有文件复制到
.obsidian/graph.json.backup-<YYYYMMDD-HHMM>。如果同一分钟的备份已存在,则重复使用该备份——不要创建多个副本。 -
仅替换
colorGroups字段,将其替换为新数组。其他所有字段保持不变。这样可以保留用户的缩放、物理效果、筛选、搜索和显示偏好。 -
使用与原文件相同的 JSON 样式写回文件(通常为紧凑的单行格式或 2 空格缩进——保留原有格式)。
第 4 步:报告并记录
打印类似以下内容的摘要:
Graph colorized → .obsidian/graph.json
Mode: by-tag
Groups: 7 color assignments
Palette: blue, orange, red, teal, green, yellow, purple
Backup: .obsidian/graph.json.backup-20260424-1432
Reload Obsidian (Cmd/Ctrl+R) to see the new colors.
If Obsidian is currently open, close it first OR reload immediately — Obsidian
overwrites graph.json on close and can erase these changes.
追加到 $VAULT_PATH/log.md:
- [TIMESTAMP] GRAPH_COLORIZE mode=<mode> groups=<N> backup=graph.json.backup-<stamp>
边界情况
- 库中没有标签,且处于
by-tag模式 → 回退到by-category,并告知用户。 - 用户想撤销 → 从最新的
graph.json.backup-*恢复,并在log.md中注明。 - 用户想清除所有颜色组 → 设置
colorGroups: [],备份,并以GRAPH_COLORIZE mode=clear记录。 - 缺少
.obsidian/→ 该库尚未在 Obsidian 中打开过。告知用户先打开一次,然后重新运行。不要自行创建.obsidian/——Obsidian 首次打开时会在其中生成许多文件。 - 查询语法注意事项:包含空格的文件夹路径需要加引号(
path:"my folder");带嵌套斜杠的标签按原样使用(tag:#visibility/internal);不要进行 URL 编码。 - 编辑期间 Obsidian 处于打开状态:提示用户注意风险——Obsidian 会在启动时读取 graph.json,并在关闭时重写该文件。如果用户正在实时编辑,告知他们先关闭 Obsidian,或立即运行重新加载(Cmd/Ctrl+R),并在此之前避免打开图谱设置。
备注
- 这只是纯配置编辑——不会更改页面内容,也不会写入 frontmatter。
- 可以安全地重复运行:每次运行都会创建一个新备份,且只会重写
colorGroups。 - 如果用户想保留手动整理的颜色组,建议使用
combined模式,或在覆盖前征求用户意见。 - 此处的调色板与
wiki-export的graph.html社区配色一致,因此 Obsidian 图谱与导出后的可视化效果保持一致。