twhsi/obsidian-graph-view
Render Obsidian-style weighted graph views from book JSON, keyword indexes, TOCs, card data, or node-link data. Use when the user asks for Obsidian graph view, graph view png, weighted graph, keyword graph, directory-keyword graph, spherical graph visualization, or high-weight nodes centered with clear Chinese labels.
npx skills add https://github.com/twhsi/skills --skill obsidian-graph-view
Create an Obsidian-like graph visualization from structured note/book data.
Produce three files when possible:
*.png for direct viewing and sharing*.svg for editable vector output*.html for browser re-renderingPrefer PNG dimensions around 1800 x 1300 unless the user asks otherwise.
PingFang TC / Heiti TC / system CJK fonts, white text, dark translucent label boxes, and avoid placing labels directly on dark edges.For EPUB/project-note JSON:
toc[] becomes chapter or directory nodes.index[] becomes keyword nodes.index[].links[] becomes keyword-to-chapter edges.toc[].cjk_count, keyword weight, and index link weights contribute to node size.chunks[].keyword_backlinks[] can be used to enrich link weights.For generic graph JSON:
nodes[] with id, label, weight, and optional kind.edges[] with source, target, and optional weight.N nodes by descending weight; default to 15 if the user asks for a focused graph.When the data does not already provide Trail groups, infer them from repeated keywords, chapter labels, or user-provided concepts. For example:
危機演化線: 馬爾薩斯、達爾文、危機、演化夢想救援線: TARS、Brand、Plan A、夢想、救援檢查背叛線: 曼恩、異常、數據、背叛、檢查卡片系統線: Agent、Skill、卡片盒、半人馬、五維空間If a node matches two Trail groups, draw it as a two-color taiji sphere and keep the label explicit.
Use scripts/render_obsidian_graph_view.py as the starting point for JSON-to-SVG/HTML/PNG graph rendering. Patch the script for project-specific schemas rather than rewriting from scratch.
Take twhsi/obsidian-graph-view from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.