mcpField
G
graph-colorize

graph-colorize

github.com/ar9av设计与 UI3.6k2.8k 次安装1 天前更新
代码仓库

关于 graph-colorize

graph-colorize 是一项技能,可修改 Obsidian 的 graph.json,按标签、文件夹、可见性或自定义映射为图谱节点着色。它会先备份文件,并保留其他图谱设置。

主要功能

  1. 01按标签、类别或可见性为节点着色
  2. 02组合可见性与标签着色
  3. 03应用明确的自定义颜色映射
  4. 04编辑前备份设置
  5. 05除颜色组外保留其他设置

适用场景

  1. 01区分 Obsidian 图谱中的主题
  2. 02突出显示内部或 PII 页面
  3. 03为知识库文件夹设置稳定颜色
  4. 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。

开始之前

  1. 解析配置 — 按照 llm-wiki/SKILL.md 中的 Config Resolution Protocol 操作(内联 @name 覆盖 → 沿 CWD 向上查找 .env → 全局配置 → 提示设置)。由此获取 OBSIDIAN_VAULT_PATH。
  2. 确认 $OBSIDIAN_VAULT_PATH/.obsidian/ 存在。如果不存在,说明该 vault 从未在 Obsidian 中打开过 — 告诉用户先在 Obsidian 中打开一次该 vault,然后重新运行。
  3. 如果 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 组,并告知用户其余标签将共用“其他”颜色。

#Hexrgb(打包整数)角色
0#4E79A75142951蓝色
1#F28E2B15896107橙色
2#E1575914767961红色
3#76B7B27780786蓝绿色
4#59A14F5873999绿色
5#EDC94815583048黄色
6#B07AA111565217紫色
7#FF9DA716751527粉色
8#9C755F10253663棕色
9#BAB0AC12234924灰色

每种颜色都包装为 {"a": 1, "rgb": <int>}。

模式:by-tag
  1. 对 $VAULT_PATH/**/*.md 执行 glob,排除 _archives/、_raw/、.obsidian/、node_modules/、index.md、log.md、_insights.md。
  2. 从每个页面解析 frontmatter 中的 tags。统计每个标签的使用次数。
  3. 从频率列表中移除 visibility/* 标签 — 这些是保留的系统标签,仅由 by-visibility 或 combined 模式处理。
  4. 按使用次数取排名最高的 10 个标签。如果唯一标签少于 10 个,则全部使用。
  5. 对于索引为 i 的标签 T:输出 {"query": "tag:#T", "color": palette[i]}。
  6. 可选:在末尾追加一个用于未标记页面的兜底条目:{"query": "-[\"tag\":]", "color": palette[9]} — 如果颜色槽 9 已分配给实际标签,则跳过。
模式:by-category

按以下固定顺序使用 vault 的七个顶层文件夹,以确保不同运行之间颜色稳定:

文件夹颜色索引
concepts0(蓝色)
entities1(橙色)
skills2(红色)
references3(蓝绿色)
synthesis4(绿色)
projects5(黄色)
journal6(紫色)

对每个存在且至少包含一个 .md 文件的文件夹输出一个条目。每个条目的格式为:

{"query": "path:\"<folder>\"", "color": {"a": 1, "rgb": <int>}}
模式:by-visibility

按以下顺序恰好输出三项(按首次匹配生效,因此限制性最强的项放在最前面):

  1. visibility/pii → #E15759(红色,rgb 14767961)
  2. visibility/internal → #F28E2B(橙色,rgb 15896107)
  3. 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(不要覆盖其他内容)

  1. 读取现有的 $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
    }
    
  2. 先备份:写入前将现有文件复制到 .obsidian/graph.json.backup-<YYYYMMDD-HHMM>。如果同一分钟的备份已存在,则重复使用该备份——不要创建多个副本。

  3. 仅替换 colorGroups 字段,将其替换为新数组。其他所有字段保持不变。这样可以保留用户的缩放、物理效果、筛选、搜索和显示偏好。

  4. 使用与原文件相同的 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 图谱与导出后的可视化效果保持一致。

评论

支持 Markdown