An Obsidian plugin that converts Supernote handwritten .note files into markdown using AI vision APIs — bring your own API key.
- Watches a folder on your computer where Supernote files are synced (via Supernote Cloud, Dropbox, or any other method)
- Renders each page of a
.notefile as an image using thesupernote-typescriptlibrary - Sends each page image to your chosen AI provider for handwriting recognition
- Saves the transcribed text as a markdown note in your vault, with YAML frontmatter recording the source file and which model did the transcription
- Bring your own API key — supports OpenAI (GPT-4o), Anthropic (Claude), and Google Gemini
- Incremental sync — only new or changed files are processed; previously transcribed notes are skipped
- Automatic polling — checks for new files every 60 seconds in the background
- Multi-page support — each page becomes a
## Page Nsection in the note - Built-in fallback — if the AI call fails, falls back to the Supernote device's own handwriting recognition (if enabled on the device)
- Optional image embeds — save rendered page images alongside the transcribed text
- Customisable AI prompt — edit the prompt to control output language, formatting style, and more
- Frontmatter provenance — every note records
transcribed_byso you always know whether AI or the device's built-in recognition was used - NEW: Task sync — Syncs your Supernote ToDos and saves them to a specified file in your vault, tags them #task for use with the Tasks Obsidian Plugin. (You can change the tag as well.)
- A Supernote device (A5X, A6X, A6X2 Nomad, A5X2 Manta, or compatible)
- Supernote files synced to your computer (via Supernote Cloud, Dropbox, syncthing, USB, etc.)
- An API key from one of the supported AI providers:
- OpenAI — uses
gpt-4oby default - Anthropic — uses
claude-sonnet-4-6by default - Google AI Studio — uses
gemini-2.0-flashby default
- OpenAI — uses
- Obsidian desktop (this plugin uses Node.js file system APIs and is not available on mobile)
- For ToDo sync - a Supernote account and password
You can install via BRAT and this repo. Just copy the Github URL into Bart, and enable.
- Download
main.js,manifest.json, andstyles.cssfrom the latest release - Copy them into
<your vault>/.obsidian/plugins/supersidian/ - Reload Obsidian and enable the plugin under Settings → Community plugins
Open Settings → Supersidian after enabling the plugin.
| Setting | Description |
|---|---|
| Supernote watch folder | Absolute path to the folder where your .note files are synced, e.g. /Users/you/SupernoteCloud/Note |
| Output folder | Vault-relative folder where transcribed notes are saved. Default: Supernote |
| Note title template | {{filename}} and {{date}} (YYYY-MM-DD) are available as variables |
| Embed page images | Also save rendered page images alongside the text in the note |
| Provider | OpenAI, Anthropic, or Google Gemini |
| API key | Your key for the selected provider |
| Model | Leave blank to use the provider default, or enter a specific model name |
| AI prompt | The instruction sent with each page image. Customise to change language, tone, or formatting conventions |
The plugin checks for new or changed .note files automatically every 60 seconds. You can also trigger it manually:
- Settings panel → click Process new files
- Command palette →
Supersidian: Process new Supernote files
To re-transcribe files that have already been processed (e.g. after changing your AI prompt):
- Settings panel → click Reprocess all
- Command palette →
Supersidian: Force reprocess all Supernote files
Each transcribed note includes YAML frontmatter:
---
source: "MyNote.note"
created: 2026-05-28
transcribed_by: anthropic/claude-sonnet-4-6
tags:
- supernote
---Multi-page notes are separated by ## Page N headings and horizontal rules.
Your .note file pages are rendered locally on your machine and sent as images directly to your chosen AI provider's API. No data passes through any Supersidian server. Your API key is stored in your vault's local plugin data (data.json) and never transmitted anywhere other than the provider's API endpoint.