Obsidian Organizer
Organizes Obsidian vault files using local LLMs — generates titles, categorizes, renames, organizes into folders. Supports markdown and images (Qwen2-VL-7B).
The Vault Is a Black Hole of Unstructured Notes
Obsidian vaults grow chaotically — notes with auto-generated IDs, inconsistent filenames, no folder organization. A year of daily note-taking produces hundreds of files like 1628473920.md, untitled 23.md, and note (3).md scattered across a flat vault root. Finding anything requires full-text search or memory of approximate creation dates.
Manually organizing thousands of notes is impractical — no one has the time to read, title, categorize, and file every note they've ever written. The cognitive overhead of maintaining a clean vault causes most users to abandon organization entirely, making the problem compound with every new note.
The goal: an app that scans your vault, uses local LLMs to understand each file's content, generates meaningful titles, categorizes by topic, and reorganizes into a clean folder hierarchy — all running locally with no cloud API costs and no data leaving your machine.
Two-Component Pipeline for AI-Powered Vault Organization
Obsidian Organizer is a two-component system: a Python CLI backend using MLX-LM for markdown files and MLX-VLM (Qwen2-VL-7B) for images, wrapped in a Tauri 2 GUI. The Python backend handles all ML inference on Apple Silicon, while the Tauri shell provides native macOS window controls and a visual diff interface for proposed changes.
The pipeline flows unidirectionally: vault scan discovers all files → content extractor reads markdown text and base64-encodes images → local LLM inference generates titles and classifies categories → organizer renames files and moves them into a topic-based folder hierarchy. The user previews every proposed change before committing, ensuring no data is ever lost or accidentally rearranged.
import mlx_lm
model, tokenizer = mlx_lm.load("mlx-community/Qwen2.5-3B")
for filepath in vault.rglob("*.md"):
title = mlx_lm.generate(model, tokenizer,
prompt=f"Generate a concise title for:\n{filepath.read_text()[:512]}",
max_tokens=32, temp=0.3)
organizer.propose_rename(filepath, title.strip())
Vault Scan to Organize Pipeline
Tauri 2 ↔ Python Backend ↔ MLX ↔ VLM
Local AI Stack for On-Device Vault Intelligence
Key Engineering Decisions
Running MLX-LM locally on Apple Silicon provides zero-cost inference, full privacy preservation (no data ever leaves the machine), and offline operation. Apple Silicon's unified memory and Neural Engine make on-device inference fast enough for batch processing hundreds of vault files without the latency, cost, and privacy concerns of cloud LLM APIs.
A visual preview interface lets users see proposed titles, categories, and folder destinations before any files are renamed or moved. The approve/reject workflow prevents accidental data loss and builds user confidence in the AI's suggestions. Tauri 2 provides a lightweight native shell (~5MB) with macOS-native file dialogs and window management.
The Python ML ecosystem (MLX, MLX-VLM, transformers) enables faster prototyping and iteration on model inference, prompt engineering, and classification logic. The MLX Python API is significantly more mature than Rust bindings, and decoupling the backend means model updates and prompt changes don't require recompiling the Tauri shell.
Processing vault files in batches maximizes LLM inference throughput by amortizing model load and prompt preparation overhead across multiple files. A batch of 20 files takes only ~3x longer than a single file, whereas 20 individual classifications would incur model loading and memory allocation 20 times. Batch processing also avoids rate-limit concerns with local MLX inference — the Apple Neural Engine handles sustained batch throughput better than bursty single-inference calls. Most importantly, the batch model enables a user review step: all proposed changes (filenames, categories, destinations) are presented in a single preview before any filesystem mutations occur, preventing the "surprise rename" problem of real-time approaches.
Six Sessions from Scaffold to Full Pipeline
Complete, Local-First Vault Organization Pipeline
Complete vault organization pipeline supporting both text (MLX-LM) and image (MLX-VLM/Qwen2-VL-7B) files. The system scans an Obsidian vault, extracts content (markdown text and base64-encoded images), runs local LLM inference for title generation and category classification, and reorganizes files into a topic-based folder hierarchy. All processing runs locally on Apple Silicon with zero cloud API costs.
Industry alignment: The local-first ML pipeline mirrors the trajectory of Apple Intelligence — running capable models on-device for privacy and low latency. The dual-model approach (text LM + vision LM) follows the pattern of multimodal AI systems, handling both textual notes and image-based content within a single unified organization pipeline.