Write naturally on your Supernote. Get beautifully formatted, instantly searchable notes in Obsidian and todos in your task app of choice automatically.
Supersidian is a fully automated pipeline that transforms Supernote Real-Time Recognition notes into clean, structured Markdown inside Obsidian, preserving your notebook hierarchy, applying intelligent formatting fixes, and correcting common recognition errors. Supersidian also identifies tasks in your notes and syncs them to your Obsidian vault and, optionally, your todo app of choice.
With a flexible plugin architecture, Supersidian supports different sync services, note apps, and todo platforms, making it adaptable to your workflow.
Supersidian requires a fairly high degree of technical knowledge to install. Important note: no support is provided. Please do not contact me for assistance.
- What problem does Supersidian solve?
- How Supersidian works
- Installation
- Quick Start
- Configuration
- Running Supersidian
- Folder Strategy
- Editing Corrections Inside Obsidian
- Supersidian Status Notes
- Plugin Architecture
- Logging
- Healthcheck Monitoring
- Scheduling
- License
Supernoteโs handwriting recognition is excellent, but the workflow around it has limitations:
- Real-Time Recognition text is trapped inside the
.notefile. - Manual export (TXT/DOCX) breaks your flow.
- Recognized text often merges headings or loses indentation.
- Bullet structure is not reliably preserved.
- You can't automatically sync into a note-taking system like Obsidian.
- Supports Obsidianโstyle checkboxes (
[ ]and[x]) written directly on Supernote
Supersidian automates the entire pipeline:
- Extract text directly from
.notefiles using supernote-tool. - Clean up the output โ unwrap lines, fix bullets, split inline headings, normalize spacing.
- Support nested bullets using a simple Supernote-friendly syntax (
-,--,---). - Apply your custom word corrections using a Markdown file inside your Obsidian vault.
- Write Markdown files to the correct subfolders in the vault.
- Skip unchanged notes using timestamp comparison.
- Sync your tasks from inside Supernotes to Obsidian and your todo app of choice.
Using Real-Time Recognition notes, optionally in Markdown format with structured bullets:
- Top bullet
-- Nested bullet
--- Third level
Your device syncs notes to a local folder. Supersidian supports:
- Dropbox (recommended) - Automatic cloud sync
- Local filesystem - Manual file transfer or other sync methods
Typically, your notes will be in:
Dropbox/Supernote/Note/<YourFolderStructure>
See Plugin Architecture for more sync options.
It compares modified timestamps and skips notes that havenโt changed relative to their Obsidian counterparts.
Supersidian shells out to the tool:
supernote-tool convert -t txt -a <file.note> output.txt
This ensures the text you see on the device is the text the system processes.
Supersidian:
- fixes line wrapping
- standardizes bullet styles
- splits inline headings (e.g.,
some text ##Headingโ two lines) - normalizes heading spacing (e.g.
##Titleโ## Title) - converts
-, --, ---into nested Markdown indentation - capitalizes the first letter of each separated line
- converts
[ ] taskand[x] tasklines into proper Obsidian tasks (- [ ] Task,- [x] Task)
Supersidian detects Supernote lines starting with [ ] or [x] and transforms them into Obsidian tasks:
[ ] follow up with client
[x] send agenda
becomes:
- [ ] Follow up with client
- [x] Send agendaThis works alongside nested bullets and aggressive cleanup.
Tasks are automatically synced to Obsidian. You can optionally sync them to external task apps like Todoist โ see Plugin Architecture for details.
On the first run, Supersidian automatically creates a Supersidian/ folder in each enabled vault containing:
- Status Note - Run statistics and sync status (updated on each run)
- Replacements Note - Custom word corrections that you can edit
These files are created automatically and don't require manual setup.
The Supersidian folder in your vault includes a special file:
Supersidian Replacements.md
That file will include a comment with the format for your replacement dictionary explained. You can add corrections:
- Supersidain -> Supersidian
- Mehady -> Mehdi
- Conducotr -> Conductor
Supersidian applies these after formatting. It uses whole-word replacement to avoid mangling substrings.
Supersidian mirrors your Supernote folder structure:
Supernote/Note/Acme/Products/Foo.note
โ Obsidian/Acme/Products/Foo.md
- Python 3.8+ required
- Supernote device with Real-Time Recognition enabled
- Sync service - Dropbox (recommended) or manual file transfer
- Note app - Obsidian (recommended) or plain Markdown storage
Supersidian is cross-platform and runs on macOS, Linux, and Windows.
pip install supersidianThis installs Supersidian and all dependencies, including supernotelib (which provides supernote-tool).
git clone https://github.com/jaygoldman/supersidian.git
cd supersidian
pip install -e .The -e flag installs in editable mode for development.
supersidian --versionCopy the example environment file:
cp .env.example .envEdit .env and set your Supernote path:
SUPERSIDIAN_SUPERNOTE_ROOT=/Users/you/Dropbox/Supernote/NoteCopy the example configuration:
cp supersidian.config.example.json supersidian.config.jsonEdit supersidian.config.json to define your vault mappings:
{
"bridges": [
{
"name": "personal",
"enabled": true,
"supernote_subdir": "Personal",
"vault_path": "/Users/you/Documents/Obsidian/Personal",
"extra_tags": ["supernote"],
"aggressive_cleanup": false
}
]
}supersidianOr with verbose output:
supersidian --verboseSee Scheduling for cron or launchd setup.
Supersidian uses two configuration files:
Copy .env.example to .env and configure:
Core Settings:
# Path to your Supernote files
SUPERSIDIAN_SUPERNOTE_ROOT=/Users/you/Dropbox/Supernote/Note
# Path to bridges configuration (optional, default: supersidian.config.json)
SUPERSIDIAN_CONFIG_PATH=./supersidian.config.jsonProvider Settings:
# Sync provider: dropbox, local
SUPERSIDIAN_SYNC_PROVIDER=dropbox
# Note provider: obsidian, markdown
SUPERSIDIAN_NOTE_PROVIDER=obsidian
# Todo provider: noop, todoist
SUPERSIDIAN_TODO_PROVIDER=noop
# Notification providers (comma-separated): webhook, noop
SUPERSIDIAN_NOTIFICATION_PROVIDERS=webhookTodoist Settings (if using todoist provider):
SUPERSIDIAN_TODOIST_API_TOKEN=your_token_hereNotification Settings (if using webhook provider):
SUPERSIDIAN_WEBHOOK_URL=https://ntfy.sh/your-topic
SUPERSIDIAN_WEBHOOK_TOPIC= # Optional topic field
SUPERSIDIAN_WEBHOOK_NOTIFICATIONS=errors # all, errors, or noneSee .env.example for all available options.
Copy supersidian.config.example.json to supersidian.config.json and configure your bridges.
Each bridge maps a Supernote folder to a note vault:
{
"bridges": [
{
"name": "personal",
"enabled": true,
"supernote_subdir": "Personal",
"vault_path": "/Users/you/Obsidian/Personal",
"extra_tags": ["supernote", "personal"],
"aggressive_cleanup": false,
"export_images": true,
"images_subdir": "Supersidian/Assets"
},
{
"name": "work",
"enabled": true,
"supernote_subdir": "Work",
"vault_path": "/Users/you/Obsidian/Work",
"extra_tags": ["work"],
"aggressive_cleanup": true
}
]
}Bridge Options:
name- Unique identifier for the bridgeenabled- Set tofalseto temporarily disablesupernote_subdir- Folder withinSUPERSIDIAN_SUPERNOTE_ROOTvault_path- Absolute path to your note vaultextra_tags- Additional tags for notes from this bridgeaggressive_cleanup- More aggressive line unwrapping (optional)export_images- Export note pages as PNG images (optional)images_subdir- Where to store images (optional)
Supersidian supports multiple bridges running in parallel.
After configuration, run Supersidian with:
supersidianWith verbose output:
supersidian --verboseCheck version:
supersidian --versionSupersidian:
- Scans all enabled bridges
- Discovers Supernote
.notefiles via sync provider - Compares timestamps (skips unchanged notes)
- Extracts text using
supernote-tool - Cleans and formats Markdown
- Applies custom word replacements
- Extracts and syncs tasks (if todo provider configured)
- Writes notes via note provider
- Updates status notes
- Sends notifications (if configured)
For automated execution, see Scheduling.
Supersidian is designed to run repeatedly in the background to keep your vault in sync.
Supersidian mirrors whatever folder structure you maintain on your Supernote device.
If your Supernote contains:
Acme/
Phoenix/
Intake/
Playbooks/
Your Obsidian vault will contain:
Acme/
Phoenix/
Intake/
Playbooks/
Important:
If you later move a note inside Obsidian, and then update the corresponding .note file on Supernote, the next Supersidian run will recreate it at the original mirrored path.
Users maintain their own correction list directly inside their vault, in a special file created automatically by Supersidian:
Supersidian Replacements.md
For example, for a bridge named acme:
Obsidian/Acme/Supersidian/Replacements - acme.md
This enables:
- personal handwriting quirks
- domain-specific terms
- client names
- fixing repeated misrecognitions
Example:
- Kekr -> KKR
- Supesidian -> Supersidian
Every run loads this note and applies the corrections.
On every run, Supersidian generates a status report inside your Obsidian vault for each enabled bridge. The note is named:
Supersidian Status - <bridge name>.md
For example, for a bridge named acme:
Obsidian/Acme/Supersidian/Status - acme.md
Each run overwrites the status note with an updated summary:
- Last run timestamp
- Supernote source path
- Obsidian vault path
- Total notes found
- Notes converted on this run
- Notes skipped (already up to date)
- Notes with no extractable text
Example:
# Supersidian Status - acme
- Last run: 2025โ12โ01T22:34:56
- Supernote path: `/Users/.../Dropbox/Supernote/Note/Acme`
- Vault path: `/Users/.../Obsidian/Acme`
## Summary
- Notes found: 23
- Converted this run: 2
- Skipped (upโtoโdate): 21
- No text extracted: 0
This gives you realโtime visibility:
- whether Supersidian ran successfully
- whether Dropbox or Supernote failed to sync
- whether extraction succeeded
- which notes were updated
It allows monitoring directly inside Obsidian without reading log files.
Supersidian uses a flexible plugin system for four integration points:
Control how Supersidian accesses your note files:
dropbox(default) - Dropbox-synced local folderlocal- Direct filesystem access (manual sync, other services)
Configuration:
SUPERSIDIAN_SYNC_PROVIDER=dropbox # or: localControl how notes are written and formatted:
obsidian(default) - Obsidian with YAML frontmatter, deep links, custom replacementsmarkdown- Plain Markdown files without app-specific features
Configuration:
SUPERSIDIAN_NOTE_PROVIDER=obsidian # or: markdownControl where tasks are synced:
noop(default) - No external task synctodoist- Sync tasks to Todoist
Configuration:
SUPERSIDIAN_TODO_PROVIDER=todoist
SUPERSIDIAN_TODOIST_API_TOKEN=your_token_hereFeatures:
- Local SQLite task registry for idempotent sync
- Only open tasks (
[ ]) are synced to external apps - Completed tasks (
[x]) stay local only - Safe no-op fallback if provider unavailable
See PROVIDERS.md for writing custom todo providers.
Control how you receive run notifications:
webhook- Generic HTTP webhooks (ntfy.sh, custom endpoints)noop- No notifications
Configuration:
SUPERSIDIAN_NOTIFICATION_PROVIDERS=webhook
SUPERSIDIAN_WEBHOOK_URL=https://ntfy.sh/your-topic
SUPERSIDIAN_WEBHOOK_NOTIFICATIONS=errors # all, errors, or noneNotification Modes:
errors(default) - Notify only on structural errors (missing folders, tool failures)all- Notify on every runnone- Disable notifications
Example: ntfy.sh
SUPERSIDIAN_WEBHOOK_URL=https://ntfy.sh/supersidian-alertsSee PROVIDERS.md for writing custom notification providers.
- Flexibility - Mix and match providers based on your workflow
- Extensibility - Easy to add support for new services
- No Breaking Changes - Defaults preserve existing behavior
The architecture is ready for additional providers:
- Sync: iCloud, Google Drive, OneDrive, Syncthing
- Notes: Notion, Logseq, Joplin, Bear
- Todo: Asana, ClickUp, Things, Notion
- Notifications: Slack, Discord, Email, Telegram, Pushover
See PROVIDERS.md for detailed examples and best practices.
Supersidian includes built-in logging for monitoring and debugging.
Logs are written to:
- macOS:
~/Library/Logs/supersidian/supersidian.log - Linux:
~/.local/share/supersidian/logs/supersidian.log - Fallback:
~/.supersidian.log
By default, Supersidian runs quietly (no console output), making it suitable for scheduled execution.
Enable verbose output to see logs in the terminal:
Option 1: Command line flag
supersidian --verboseOption 2: Environment variable
export SUPERSIDIAN_VERBOSE=1
supersidianVerbose mode shows:
- Conversions and skips
- Warnings and errors
- Provider activity
- Notification status
Set a custom log path:
SUPERSIDIAN_LOG_PATH=/path/to/your/supersidian.logEach entry includes timestamp, level, and message:
2025-12-08 14:23:45 [INFO] [personal] OK Note.note โ /path/to/vault/Note.md
2025-12-08 14:23:46 [WARNING] [work] skipped 5 notes (up to date)
Logs persist between runs for long-term auditing.
Supersidian includes built-in support for healthcheck monitoring services like healthchecks.io.
Set the healthcheck URL in .env:
SUPERSIDIAN_HEALTHCHECK_URL=https://hc-ping.com/your-uuidSupersidian automatically pings:
/start- When a run begins- Base URL - When a run succeeds
/fail- When a run fails
This lets healthchecks.io track:
- Whether Supersidian is running on schedule
- Whether runs are succeeding or failing
- Duration of each run
- Create a check at healthchecks.io
- Get your ping URL:
https://hc-ping.com/abc123... - Add to
.env:SUPERSIDIAN_HEALTHCHECK_URL=https://hc-ping.com/abc123...
- healthchecks.io will alert you if Supersidian stops running or fails
- Healthchecks - Monitor that Supersidian runs on schedule
- Notifications - Receive details about what happened
Use both for complete observability.
Supersidian is designed to run repeatedly in the background to keep your vault in sync. Choose your preferred scheduling method based on your operating system.
Create a LaunchAgent to run Supersidian automatically.
1. Copy the example plist file:
cp macos_com.supersidian.plist.example ~/Library/LaunchAgents/com.supersidian.plist2. Edit the file to replace placeholders:
Edit ~/Library/LaunchAgents/com.supersidian.plist and replace /Users/YOU with your home directory.
3. Load the LaunchAgent:
launchctl load ~/Library/LaunchAgents/com.supersidian.plistThis runs Supersidian every 10 minutes (600 seconds).
Note: The example file assumes supersidian is installed at
/usr/local/bin/supersidian. If you usedpip install --user, change the path to~/.local/bin/supersidian
Alternatively, use cron:
*/10 * * * * /usr/local/bin/supersidian >> ~/.supersidian.cron.log 2>&1This runs every 10 minutes. Adjust the path to match your installation.
Use Windows Task Scheduler to run supersidian on a schedule:
- Open Task Scheduler
- Create Basic Task
- Set trigger (e.g., every 10 minutes)
- Action: Start a program
- Program: Path to supersidian.exe (in your Python Scripts folder)
Check logs to confirm Supersidian is running:
# macOS/Linux
tail -f ~/.supersidian.log
# Or check status notes in your vaultMIT โ use freely, improve freely, share freely.