graph-colorize

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Graph Colorize — Color-code the Obsidian Graph View

Graph Colorize — 为Obsidian图视图添加颜色编码

You are rewriting
$OBSIDIAN_VAULT_PATH/.obsidian/graph.json
so Obsidian's graph view tints nodes by tag, folder, or visibility.
Obsidian stores graph settings in
<vault>/.obsidian/graph.json
. The
colorGroups
array is a list of
{query, color}
pairs; the first matching query wins per node. Queries use Obsidian's search syntax:
tag:#foo
,
path:"concepts"
,
file:foo
, etc. Color is
{"a": 1, "rgb": <packed-int>}
where the int is
(R << 16) | (G << 8) | B
.
你将重写
$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
计算得出。

Before You Start

开始之前

  1. Read
    ~/.obsidian-wiki/config
    , or fall back to
    .env
    in this repo, to get
    OBSIDIAN_VAULT_PATH
    .
  2. Confirm
    $OBSIDIAN_VAULT_PATH/.obsidian/
    exists. If it doesn't, the vault has never been opened in Obsidian — tell the user to open the vault once in Obsidian, then re-run.
  3. Warn the user if Obsidian is likely open: Obsidian overwrites
    graph.json
    on close. Tell them to close the vault first, or be ready to reload (Cmd/Ctrl+R) and not touch the graph settings until they reload.
  1. 读取
    ~/.obsidian-wiki/config
    ,若不存在则读取本仓库中的
    .env
    文件,获取
    OBSIDIAN_VAULT_PATH
  2. 确认
    $OBSIDIAN_VAULT_PATH/.obsidian/
    目录存在。若不存在,说明该库从未在Obsidian中打开过,请告知用户先在Obsidian中打开一次库,然后重新运行此技能。
  3. 若Obsidian可能处于打开状态,需向用户发出警告:Obsidian会在关闭时覆盖
    graph.json
    。请用户先关闭库,或准备好重新加载(Cmd/Ctrl+R),且在重新加载前不要修改图设置。

Step 1: Pick a Mode

步骤1:选择模式

Infer the mode from the user's phrasing. If ambiguous, default to by-tag.
User intentMode
"color by tag", "color my graph", "make it colorful" (default)
by-tag
"color by folder", "color by category", "color by directory"
by-category
"highlight visibility", "show internal/pii in graph", "visibility colors"
by-visibility
User provides explicit mapping (
tag:#foo = red
, or JSON blob)
custom
"combine tag and visibility" / "both"
combined
(visibility first, then tag)
根据用户的表述推断模式。若表述模糊,默认使用by-tag模式。
用户意图模式
"color by tag"、"color my graph"、"make it colorful"(默认)
by-tag
"color by folder"、"color by category"、"color by directory"
by-category
"highlight visibility"、"show internal/pii in graph"、"visibility colors"
by-visibility
用户提供明确映射(如
tag:#foo = red
或JSON片段)
custom
"combine tag and visibility" / "both"
combined
(优先匹配可见性,再匹配标签)

Step 2: Build the
colorGroups
Array

步骤2:构建
colorGroups
数组

Palette (10 distinct, colorblind-friendly colors)

调色板(10种区分度高、色弱友好的颜色)

Use in order. If more groups than colors, cycle and add a lightness shift by dividing brightness ~20% via a second pass — or just cap at 10 and tell the user the remaining tags share the "other" color.
#Hexrgb (packed int)Role
0
#4E79A7
5142951
blue
1
#F28E2B
15896107
orange
2
#E15759
14767961
red
3
#76B7B2
7780786
teal
4
#59A14F
5873999
green
5
#EDC948
15583048
yellow
6
#B07AA1
11565217
purple
7
#FF9DA7
16751527
pink
8
#9C755F
10253663
brown
9
#BAB0AC
12234924
gray
Every color is wrapped as
{"a": 1, "rgb": <int>}
.
按顺序使用。若分组数量超过颜色数量,循环使用并通过第二次调整将亮度降低约20%来实现明度偏移;或最多保留10组,并告知用户剩余标签将使用“其他”颜色。
#十六进制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>}
格式。

Mode:
by-tag

模式:
by-tag

  1. Glob
    $VAULT_PATH/**/*.md
    excluding
    _archives/
    ,
    _raw/
    ,
    .obsidian/
    ,
    node_modules/
    ,
    index.md
    ,
    log.md
    ,
    _insights.md
    .
  2. Parse frontmatter
    tags
    from each page. Count usage per tag.
  3. Drop
    visibility/*
    tags
    from the frequency list — they are reserved system tags, handled only in
    by-visibility
    or
    combined
    mode.
  4. Take the top 10 tags by usage. If there are fewer than 10 unique tags, use all of them.
  5. For each tag
    T
    at index
    i
    : emit
    {"query": "tag:#T", "color": palette[i]}
    .
  6. Optionally, append a final catch-all entry for untagged pages at the end:
    {"query": "-[\"tag\":]", "color": palette[9]}
    skip if color slot 9 is already taken by a real tag.
  1. 遍历
    $VAULT_PATH/**/*.md
    ,排除
    _archives/
    _raw/
    .obsidian/
    node_modules/
    index.md
    log.md
    _insights.md
  2. 解析每个页面的前置元数据
    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个颜色槽已被真实标签占用,则跳过此步骤

Mode:
by-category

模式:
by-category

Use the seven vault top-level folders in this fixed order so colors are stable across runs:
FolderColor index
concepts
0 (blue)
entities
1 (orange)
skills
2 (red)
references
3 (teal)
synthesis
4 (green)
projects
5 (yellow)
journal
6 (purple)
Emit one entry per folder that exists AND contains at least one
.md
file. Each entry is:
json
{"query": "path:\"<folder>\"", "color": {"a": 1, "rgb": <int>}}
按以下固定顺序使用库的7个顶级文件夹,确保每次运行时颜色保持稳定:
文件夹颜色索引
concepts
0(蓝色)
entities
1(橙色)
skills
2(红色)
references
3(蓝绿色)
synthesis
4(绿色)
projects
5(黄色)
journal
6(紫色)
为每个存在且包含至少一个
.md
文件的文件夹生成一个条目。每个条目格式如下:
json
{"query": "path:\"<folder>\"", "color": {"a": 1, "rgb": <int>}}

Mode:
by-visibility

模式:
by-visibility

Emit exactly three entries, in this order (first-match wins, so most restrictive comes first):
  1. visibility/pii
    #E15759
    (red, rgb 14767961)
  2. visibility/internal
    #F28E2B
    (orange, rgb 15896107)
  3. visibility/public
    #59A14F
    (green, rgb 5873999)
json
{"query": "tag:#visibility/pii", "color": {"a": 1, "rgb": 14767961}}
Pages with no
visibility/
tag remain Obsidian's default color — do not add a catch-all.
按以下顺序生成恰好3个条目(优先匹配第一个,因此限制最严格的条目排在最前):
  1. visibility/pii
    #E15759
    (红色,rgb 14767961)
  2. visibility/internal
    #F28E2B
    (橙色,rgb 15896107)
  3. visibility/public
    #59A14F
    (绿色,rgb 5873999)
json
{"query": "tag:#visibility/pii", "color": {"a": 1, "rgb": 14767961}}
没有
visibility/
标签的页面将保留Obsidian的默认颜色——不要添加兜底条目。

Mode:
combined

模式:
combined

Emit
by-visibility
entries first, then
by-tag
entries. Visibility wins on conflict because it appears first in the list.
先生成
by-visibility
模式的条目,再生成
by-tag
模式的条目。由于可见性条目排在前面,冲突时将优先匹配可见性。

Mode:
custom

模式:
custom

If the user gave explicit mappings, honor them literally. Convert any hex they give (e.g.
#FF00FF
) to packed int using
int(hex_without_hash, 16)
. Wrap each as
{"a": 1, "rgb": <int>}
.
若用户提供了明确的映射,严格按照其要求执行。将用户提供的任何十六进制颜色(如
#FF00FF
)转换为压缩整数,方法是使用
int(hex_without_hash, 16)
。将每个映射包装为
{"a": 1, "rgb": <int>}
格式。

Step 3: Merge into graph.json (Do Not Clobber)

步骤3:合并到graph.json(不覆盖原有设置)

  1. Read the existing
    $VAULT_PATH/.obsidian/graph.json
    . If it doesn't exist, start from this minimal default:
    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. Back up first: copy the existing file to
    .obsidian/graph.json.backup-<YYYYMMDD-HHMM>
    before writing. If a backup from the same minute exists, reuse it — don't pile up duplicates.
  3. Replace only the
    colorGroups
    field with your new array. Leave every other field untouched. This preserves the user's zoom, physics, filter, search, and display preferences.
  4. Write the file back with the same JSON style as the original (usually compact single-line or 2-space indent — preserve what's there).
  1. 读取现有的
    $VAULT_PATH/.obsidian/graph.json
    。若文件不存在,从以下最小默认配置开始:
    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空格缩进——保留原有格式)。

Step 4: Report and Log

步骤4:报告与日志

Print a summary like:
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.
Append to
$VAULT_PATH/log.md
:
- [TIMESTAMP] GRAPH_COLORIZE mode=<mode> groups=<N> backup=graph.json.backup-<stamp>
打印如下摘要:
图已完成颜色编码 → .obsidian/graph.json
  模式:    by-tag
  分组:  7个颜色分配
  调色板:蓝色、橙色、红色、蓝绿色、绿色、黄色、紫色
  备份:  .obsidian/graph.json.backup-20260424-1432

重新加载Obsidian(Cmd/Ctrl+R)即可查看新颜色。
若Obsidian当前处于打开状态,请先关闭它,或立即重新加载——Obsidian会在关闭时覆盖graph.json,可能会清除这些更改。
$VAULT_PATH/log.md
中追加内容:
- [TIMESTAMP] GRAPH_COLORIZE mode=<mode> groups=<N> backup=graph.json.backup-<stamp>

Edge Cases

边缘情况

  • No tags in vault in
    by-tag
    mode → fall back to
    by-category
    and tell the user.
  • User wants to undo → restore from the latest
    graph.json.backup-*
    and note that in
    log.md
    .
  • User wants to clear all color groups → set
    colorGroups: []
    , back up, log as
    GRAPH_COLORIZE mode=clear
    .
  • .obsidian/
    missing
    → the vault hasn't been opened in Obsidian yet. Tell the user to open it once, then re-run. Don't create
    .obsidian/
    yourself — Obsidian populates many files there on first open.
  • Query syntax gotchas: folder paths with spaces need quoting (
    path:"my folder"
    ); tags with nested slashes work literally (
    tag:#visibility/internal
    ); don't URL-encode.
  • Obsidian open during edit: surface the risk — Obsidian reads graph.json at startup and rewrites it on close. If the user is editing live, tell them to close Obsidian first or run the reload (Cmd/Ctrl+R) immediately and avoid opening graph settings before they do.
  • 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),且在重新加载前不要打开图设置。

Notes

注意事项

  • This is a pure config edit — no page content changes, no frontmatter writes.
  • Re-running is safe: each run creates a new backup, only
    colorGroups
    is rewritten.
  • If the user has manually curated color groups they want to keep, offer
    combined
    mode or ask before overwriting.
  • The palette here matches
    wiki-export
    's
    graph.html
    community colors, so the Obsidian graph and the exported visualization look consistent.
  • 这是纯配置编辑——不会修改页面内容或前置元数据。
  • 重复运行是安全的:每次运行都会创建新备份,仅重写
    colorGroups
    字段。
  • 若用户有手动整理的颜色分组想要保留,可提供
    combined
    模式,或在覆盖前询问用户。
  • 此处使用的调色板与
    wiki-export
    graph.html
    社区颜色匹配,因此Obsidian图和导出的可视化效果保持一致。