Experimental Obsidian 3D Graph Renderer

Part 20 of 21 in the Experiments in Vibecoding series.

Part 6 of 6 in the Obsidian Notebooking series.

I’ve been playing around with some ideas for visualizing the notes and connections in my Obsidian vault, and how to go beyond just producing pretty pictures and into something that might be useful to make sense of the whole thing. It’s not quite there yet, but it’s getting close. Vibecoding this with Claude Code has let me take some ideas I’ve had for years, and actually building a thing in a couple of hours.

Here’s a 30-second timelapse of my notes, sorted by date created. The first notes that show up are related to my MSc and PhD programs, and then it really starts to fill in once I started using Obsidian for everything back in 2022.

I’m working on more tools to filter the nodes (by date, tag, folder), as well as being able to select a single note and visualize its connections (over a number of “hops” to the rest of the graph).

Here’s the graph subset based on the “UCalgary Microcredentials Framework” note, +2 hops:

Rendering setting panel open to the left, with UCalgary Microcredentials Framework note selected and notes up to 2 hops away displayed.

Screenshot of the Graph Render Obsidian plugin

Rendering setting panel open to the left, with UCalgary Microcredentials Framework note selected and notes up to 2 hops away displayed.

Image by D'Arcy Norman

The plugin uses WebGL and is hardware acceleration enabled. The initial layout takes a couple of seconds, and then it’s a fully interactive 3D graph environment.

From Claude’s Readme notes:

AI-Generated Content via Claude Code (Sonnet 4.6)

3D Graph Render โ€” Obsidian Plugin

A hardware-accelerated 3D visualisation of your Obsidian vault’s note graph. Built on Three.js + WebGL, routed through Metal on macOS for full GPU acceleration. Renders in a Galaxy aesthetic: deep-space amber nebula, glowing clustered nodes, and flowing curved edge filaments.


Features

Rendering โ€” Galaxy Style

  • 3D force-directed layout โ€” d3-force-3d simulation runs inside the animation loop and self-organises automatically; watch the graph settle in real time
  • Instanced rendering โ€” single GPU draw call for all nodes regardless of vault size
  • Additive bloom โ€” nodes use additive blending so dense clusters self-brighten into hot white cores; UnrealBloomPass adds soft halos
  • Procedural nebula background โ€” a full-sphere FBM (fractional Brownian motion) GLSL shader renders animated amber/orange gas clouds behind the graph
  • Curved Bezier edges โ€” at layout convergence, straight edges are replaced by 8-segment quadratic Bezier curves with a perpendicular bow, giving a galactic-arm filament appearance
  • Clustered particle haze โ€” 6 000 warm golden particles concentrated near the graph centre via power-law radial distribution
  • Cluster-coloured nodes โ€” coloured by tag group or folder; all nodes get a colour via deterministic hashing (nothing appears grey)

and

AI-Generated Content via Claude Code (Sonnet 4.6)

Filters (Filter button โ†’ right panel)

All filters use a Seed + Expand model: matching notes are seeds (full size/brightness), their direct neighbours are shown at reduced size/brightness, everything else fades to near-invisible.

FilterWhat it does
DateSeeds = notes created or modified within last day / week / month / year
TagsSeeds = notes containing any of the selected tags (checkbox list, top 50 by frequency)
FolderSeeds = all notes inside the selected folder
Starting noteSeeds = a specific note + its N-hop neighbourhood (hop depth 1โ€“5)

Filters compose: all active conditions are unioned into one seed set.

A match count at the bottom of the panel shows N matches ยท M neighbors.

Note on date filters: “Modified” reflects the file system mtime, which is updated by sync tools (iCloud, Obsidian Sync, Dropbox) even without manual edits. Use a tighter range (Last day) for precise results.

Type in the Search box for real-time highlighting:

  • Matching nodes glow bright yellow and grow 50% larger
  • Non-matching nodes shrink and dim to near-invisible
  • Matches on note name, tags, and folder path