khr0907980 downloadsVisualize your notes in a 3D semantic space using embedding-based layouts or uploaded vectors.
Visualize your vault as a 3D semantic universe — notes that mean similar things cluster together.

Desktop-only Obsidian plugin that visualizes your notes in an interactive 3D space. Notes are positioned using OpenAI embeddings or validated uploaded vectors projected into 3D via UMAP or PCA, so semantically related notes cluster together. Without embeddings, the plugin uses a folder-based clustered sphere layout with ConvexHull cluster regions.
created / date created)Semantic clusters up close — each color is a top-level folder, and embedding-based layout pulls related topics together even across folders:

Uploaded vectors remain available independently of provider generation. Semantic search over uploaded vectors requires metadata identifying the same OpenAI provider and model used for query embeddings.
Requires Obsidian 1.11.0 or newer (desktop only).
Search for 3D Semantic Graph in Settings → Community plugins and install.
git clone https://github.com/KHR0907/obsidian-3d-semantic-graph.git
cd obsidian-3d-semantic-graph
npm ci
npm run check
npm run check runs the type checker, linter, tests, and production build. Copy only the runtime files into the plugin directory:
<your-vault>/.obsidian/plugins/3d-semantic-graph/
├── main.js
├── manifest.json
└── styles.css
Create the directory if it does not exist. Then restart Obsidian and enable 3D Semantic Graph in Settings → Community plugins. When updating an existing manual installation, replace the same three files and restart Obsidian; plugin data and embedding caches in that directory are left untouched.
npm run dev # watch mode
npm run build # production build
npm run check # typecheck, lint, tests, and production build
The distributable files are main.js, manifest.json, and styles.css. Development dependencies and source files do not need to be copied into a vault.
| Setting | Description | Default |
|---|---|---|
| Language | Plugin UI language (auto / English / 한국어) | auto |
| Embedding Provider | OpenAI, or the disabled Anthropic/Claude reservation | openai |
| API Key | OpenAI API key for embedding generation | Empty |
| Embedding Model | Embedding model for the selected provider | text-embedding-3-large |
| Custom Vector JSON | Upload/export vector JSON instead of API embeddings | Empty |
| Projection Method | UMAP or PCA for dimensionality reduction | umap |
| Layout Seed | Seed for deterministic layout | Random |
| Timeline Date Source | Date the timeline uses: file created time or frontmatter created |
ctime |
| Suggested Links | Max suggested links in the insights panel | 20 |
| Neighbor Count | Notes shown in the semantic neighbors sidebar | 10 |
| Node Color By | Color nodes by folder or first tag | folder |
| Show Links | Display link lines between notes | Off |
| Show Grid | Display XZ grid plane | On |
| Show Clusters | ConvexHull cluster region visibility | hover |
| Cluster Grouping | Group cluster regions semantically (auto-labeled) or by folder | semantic |
| Scene Theme | Auto (match app theme), dark, or light background | auto |
| Node Opacity | Node transparency (0.15–1.0) | 1.0 |
| Node Size | Node size multiplier (0.4–2.0) | 1.5 |
| Drag Sensitivity | Camera rotation sensitivity (0.2–3.0) | 1.0 |
| Auto Orbit Speed | Idle camera rotation speed (0 to disable) | 0.2 |
| Entry Animation | Expand-and-fly-in animation when the graph opens | On |
| Exclude Folders | Comma-separated folders to exclude | Empty |
| Number of Neighbors | UMAP local/global balance (5–50) | 40 |
| Minimum Distance | UMAP clustering tightness (0–0.99) | 0.80 |
embeddings-cache.json — note vectors; automatically invalidated when the model or note content changesembeddings-hashes.json — lightweight content-hash index used to validate the vault without parsing the full vector cachelayout-cache.json — computed 3D coordinates and semantic clusters; reused when nothing changed so reopening skips UMAP/PCA entirelyAll three live in the plugin directory and rebuild automatically when stale.
When OpenAI generation is enabled, cleaned note text and semantic search queries are sent to the selected OpenAI embedding model. The API key is stored in Obsidian's local plugin settings; embeddings and layout caches remain in the local plugin directory. Uploaded vector JSON is validated for finite values, consistent dimensions, and paths that exist in the current graph before it is accepted.
Exports include provider, model, and dimensions metadata plus an entries object keyed by exact vault-relative Markdown paths. Vector export downloads a file and does not create or overwrite a note in the vault.
Pairwise insights are capped at 3,000 embedded notes and duplicate results are bounded to keep memory and UI work predictable.
requestUrl APIMIT