jo-minjun146 downloadsConvert handwriting notes to Excalidraw or Markdown with OCR support to unify your knowledge base.
Turn your handwritten notes into searchable Obsidian knowledge.
Petrify converts handwritten note files into Excalidraw or Markdown format within Obsidian, with OCR that makes handwriting searchable. In Excalidraw format, your handwriting is preserved as-is on the canvas, where you can annotate with text, arrows, highlights, and links.
Sometimes a pen is the most natural way to capture your thoughts — sketching diagrams, jotting quick notes in a meeting, or writing freely without the constraints of a keyboard. Other times, typing is faster and more structured. If you use both, your knowledge inevitably splits in two: handwritten notes on your e-ink tablet, and typed notes in Obsidian.
The usual workaround — syncing handwriting files to Google Drive and opening them as PDFs — keeps your notes accessible but isolated. Handwriting exported as PDF is just a flat image — it can't be searched, linked, or tagged alongside your Obsidian notes. Your handwriting becomes dead data, locked away from search, graph view, and backlinks.
This matters even more as personal AI assistants like OpenClaw become mainstream. A unified knowledge base means your AI can draw from everything you've written — handwritten or typed — to give more personalized answers.
Petrify bridges this gap. It converts handwritten note files into Excalidraw or Markdown inside your vault, with OCR that makes the content searchable. The result is one vault, one knowledge base — regardless of whether you picked up a pen or a keyboard.
Petrify currently supports Viwoods (.note), Supernote X-series (.note), and PDF (.pdf) files, and its plugin architecture makes it straightforward to add support for other handwriting apps in the future.
With the PDF parser, you can sync and convert notes from any device that supports PDF export by selecting the pdf parser in your mapping.
This plugin is not yet published in the Obsidian Community Plugin directory.
jo-minjun/petrifygit clone https://github.com/jo-minjun/petrify.git
cd petrify
pnpm install
pnpm build
Then copy the build output to your vault:
mkdir -p <vault>/.obsidian/plugins/petrify/
cp packages/obsidian-plugin/main.js <vault>/.obsidian/plugins/petrify/
cp packages/obsidian-plugin/manifest.json <vault>/.obsidian/plugins/petrify/
cp packages/obsidian-plugin/worker.min.js <vault>/.obsidian/plugins/petrify/
cp -r packages/obsidian-plugin/tesseract-core <vault>/.obsidian/plugins/petrify/
Restart Obsidian and enable Petrify in Settings > Community Plugins.

.excalidraw.md) or Markdown (.md) — Excalidraw format requires the Excalidraw plugin
Petrify: Sync)keep: true) to prevent deletion or re-conversion — toggle via command palette or file context menu
| Setting | Description |
|---|---|
| Output format | Output file format (Excalidraw / Markdown) |
| Setting | Description |
|---|---|
| Local file watch | Enable/disable local directory watching |
| Watch directory | External folder path to watch (with Browse button) |
| Output directory | Vault path for converted files (with Browse button) |
| Parser | Parser to use (Viwoods / Supernote X-series / PDF) |
Multiple mappings can be added, each with its own watch/output directory and parser.
| Setting | Description |
|---|---|
| Google Drive API | Enable/disable Google Drive integration |
| Client ID | OAuth2 client ID from Google Cloud Console |
| Client secret | OAuth2 client secret from Google Cloud Console |
| Authentication | Authenticate with Google account |
| Auto polling | Automatically poll for changes |
| Poll interval | Minutes between polling (1–60, default: 5) |
| Folder | Google Drive folder to watch (via Browse button) |
| Output directory | Vault path for converted files |
| Parser | Parser to use (Viwoods / Supernote X-series / PDF) |
| Setting | Description |
|---|---|
| OCR provider | OCR engine (Tesseract / Google Vision) |
| Google Vision API key | API key for Google Cloud Vision (shown when Google Vision is selected) |
| Language hints | Preferred languages for recognition (Korean, English, Japanese, Simplified Chinese, Traditional Chinese) |
| Confidence threshold | Minimum OCR confidence (0–100, default: 50) |
Google Vision API free tier: Google Cloud Vision offers 1,000 free units per month. Petrify uses one unit per page, so you can OCR up to 1,000 pages/month at no cost. See Cloud Vision pricing for the latest details.

Drag and drop handwriting files (.note, .pdf) into the file explorer to create converted files at the drop location.
There are two ways to integrate Google Drive handwriting files:
If you use Google Drive for Desktop to sync your handwriting files locally, you can point a Watch Directory at the synced folder for automatic conversion.
~/Library/CloudStorage/GoogleDrive-<account>/My Drive/<folder>G:\My Drive\<folder> (drive letter may vary)If virtual drive mounting is blocked (e.g. corporate policy), the Google Drive API adapter detects changes and downloads files directly via API.
Each user needs their own Google Cloud OAuth credentials:
localhost, copy the entire URL from the address bar and paste it into the Obsidian modalKey features:
By default, this plugin does not make any network requests. Network access occurs only when using specific features:
This plugin reads files from directories outside your Obsidian vault. Specifically:
All configured directory paths are stored in the plugin's local data file within your vault. Sensitive data (OAuth tokens, API keys, client secrets) are stored via Obsidian's SecretStorage API, which provides OS-level encryption.
MIT
For development setup, architecture, and package structure, see CONTRIBUTING.md.