Vision2Canvas
approvedby Jhe
Convert physical handwritten notes into structured .canvas whiteboards via Vision AI. - This plugin has not been manually reviewed by Obsidian staff.
Vision2Canvas for Obsidian π
Convert physical handwritten note photos, whiteboard sketches, and mind maps into native, structured Obsidian
.canvaswhiteboards with Vision AI.
English README | ηΉι«δΈζθͺͺζζδ»Ά
π Overview
Vision2Canvas bridges the gap between analog handwritten thinking and digital Obsidian knowledge bases. Using multimodal Vision Large Language Models (Vision MLLMs like Google AI Studio Gemini, OpenAI, Claude, or OpenClaw), this Obsidian plugin not only extracts text OCR but also:
- Preserves Spatial Layout: Maps handwritten sections to absolute
(x, y)coordinates and card dimensions. - Translates Visual Connections: Converts arrows, flowchart paths, and group boxes into native Obsidian Canvas
nodes,edges, andgroups. - Desktop Workflow: Instantly process clipboard screenshots or images directly in your vault.
π Key Features
-
Spatial Bounding Box Mapping
Maps handwritten columns, bullet points, and margin notes to Canvas nodes with proper spacing and color categorization. -
Smart Arrow & Hierarchy Detection
Automatically detects connecting arrows, labels them, and attaches them to the best attachment sides (top,bottom,left,right). -
OpenAI & Google AI Studio Compatible API
Seamlessly connects to Google AI Studio (Gemini), OpenAI API, or local MLLM gateways. -
Multi-Channel Desktop Triggers
- Clipboard Command: Copy any image or screenshot to clipboard β
Convert Clipboard Image to Canvas. - Vault File Menu: Right-click any image (
.png,.jpg,.jpeg,.webp) in Obsidian file explorer βConvert to Obsidian Canvas Whiteboard.
- Clipboard Command: Copy any image or screenshot to clipboard β
π System Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Input Triggers β
β βββββββββββββββββββββββ βββββββββββββββββ β
β β Clipboard Screenshotβ β Vault Image β β
β ββββββββββββ¬βββββββββββ βββββββββ¬ββββββββ β
ββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌββββββββββββββββββββββββ
β β
βΌ βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Vision2Canvas Plugin Core β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β VisionClient (Google AI Studio / OpenAI Compatible Vision API) β β
β ββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ β
β β (Spatial OCR + JSON Schema Output)β
β ββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββ β
β β CanvasBuilder & CanvasValidator β β
β β - Coordinate Normalization (scaleX, scaleY) β β
β β - Edge Connection Sides calculation (top, bottom, left, right) β β
β ββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββ
β Obsidian Vault (.canvas File) β
βββββββββββββββββββββββββββββββββ
π Quick Start & Installation
1. Build & Install Plugin
# Clone repository into your vault's plugin directory
cd /path/to/your/vault/.obsidian/plugins/
git clone https://github.com/yourname/vision2obsidian.git
cd vision2obsidian
# Install dependencies and compile bundle
npm install
npm run build
Then in Obsidian: Settings β Community Plugins β Enable Vision2Canvas.
2. Configure Settings
In Obsidian Settings β Vision2Canvas:
- AI API Endpoint:
https://generativelanguage.googleapis.com/v1beta/openai(orhttps://api.openai.com/v1) - API Key:
YOUR_API_KEY - Vision Model Name:
gemini-flash-latest(orgpt-4o)
π§ͺ Testing & Verification
Run the included standalone test script to test converting ref/sample.jpeg into output_sample.canvas:
npm run test:sample
Output:
--- TEST RESULTS ---
Generated 15 nodes and 4 edges.
Saved output canvas to: /Users/user/projects/vision2obsidian/output_sample.canvas
π License
MIT License Β© 2026 beno66edu
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.