Handwriting → Markdown → Knowledge
A capture surface for Obsidian on Onyx Boox e-ink tablets. Write with a pen. Tag with your vault's vocabulary. Sync as markdown.
Fork of Ethran/notable. The upstream project is a general-purpose note-taking app for Boox devices. This fork strips it down to a single purpose: capture handwritten thoughts and sync them into your Obsidian vault as markdown.
Obsidian is great for organizing knowledge, but it assumes a keyboard. If you think with a pen — sketching, scrawling, drawing connections — there's a gap between the page and the graph. The Boox tablet is the best e-ink hardware for writing, and Notable is the best open-source app for that hardware. This fork bridges the two.
The core idea is atomic capture: each page is one thought. You write it, tag it with tags from your vault, and hit save. Handwriting recognition converts your strokes to text. The result lands in your Obsidian inbox as a markdown file with frontmatter, ready to be processed in your normal workflow.
The tablet becomes a dedicated input device for your second brain. No file management, no notebooks, no folders. Just capture and sync.
Everything here serves the Obsidian capture loop. Changes fall into three categories:
- Atomic capture model — every new page is a capture. No notebooks, folders, or file organization on the device. The library is a flat grid of captures.
- Tag UI — collapsible toolbar at the top with tag pills pulled from your Obsidian vault (ranked by frequency and recency), text search with autocomplete. Tags flow into the markdown frontmatter on sync.
- Annotation boxes — draw a box over handwritten text to mark it as a
[[wiki link]]or#tag. These render as bracket/hash overlays on the canvas and get recognized inline during sync. - Save & exit — one button. Returns to the library instantly; sync happens in background.
- Onyx HWR (MyScript) — uses the Boox firmware's built-in MyScript engine via AIDL IPC. Replaced Google ML Kit, which had poor accuracy. MyScript is significantly better, especially for short phrases and mixed content.
- Annotation-aware recognition — strokes inside
[[]]boxes become wiki links, strokes inside#boxes become tags. Recognition diffs full-page vs. non-annotated strokes for better accuracy (recognizing isolated short words like "pkm" in a box is harder than letting full-page context disambiguate). - Line segmentation — multi-line captures are clustered by vertical position and recognized line-by-line with sequential context feeding forward.
- Markdown output — captures sync as
.mdfiles to a configurable folder in your vault with YAML frontmatter (created,tags). - Vault tag scanning — parses tags from existing markdown files in your inbox folder so you can reuse your vocabulary.
- Background sync — recognition and file writing happen in a coroutine after you've already navigated away. A "Syncing..." overlay shows on pages still processing.
- Left-edge sidebar — all tools moved from a bottom toolbar to a vertical sidebar on the left. Pen picker and eraser flyouts appear to the right. Keeps the writing area unobstructed.
- Jetpack Ink API — replaced ~200 lines of custom stroke rendering with
androidx.ink'sCanvasStrokeRenderer. - Fountain pen default — with a sqrt pressure curve so light strokes are visible and heavy strokes feel natural on e-ink.
These aren't stated goals — they're patterns visible in every commit:
- Speed is non-negotiable. Sync is background. Navigation is instant. Tag suggestions are cached. Nothing blocks the pen.
- Minimal chrome. If it's not capture, tagging, or saving, it's removed. No folders, no notebooks, no import/export UI. The library is a grid. The editor is a page.
- Pen-first interaction. Annotations are drawn, not typed. The sidebar stays out of the way. The default pen feels good at first touch.
- Obsidian is the system of record. The tablet captures; Obsidian organizes. No duplicate taxonomy, no competing folder structures. Tags come from the vault and go back to the vault.
- An Onyx Boox tablet (pen input requires Onyx hardware)
- An Obsidian vault accessible on the device (e.g. via Syncthing, Dropsync, or USB)
Build from source (see CLAUDE.md for full build instructions):
./gradlew assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk- Open Settings in the app
- Set your vault path to the Obsidian vault directory on the device
- Set the inbox folder where captures should land (e.g.
inbox/) - Start capturing
- Tap New Capture in the library
- Write with the pen. Tag by selecting existing vault tags from the toolbar, or typing new ones.
- Optionally draw annotation boxes: tap
[[or#in the sidebar, then draw a rectangle over text to mark it as a wiki link or tag - Tap Save & Exit
- The app navigates back immediately. In the background, strokes are recognized, annotations are resolved, and a markdown file is written to your vault inbox.
The resulting file looks like:
---
created: "[[2025-01-15]]"
tags:
- meeting-notes
- project-alpha
---
discussed the [[API redesign]] with the team
need to revisit #authentication flow before launchThis fork keeps the core Notable functionality that matters for capture:
- Low-latency Onyx Pen SDK input (
TouchHelper+RawInputCallback) - E-ink optimized rendering (no animations, batched refreshes,
EpdControllerrefresh modes) - Undo/redo history
- Selection, copy, and lasso tools
- Multiple pen types (fountain, ballpoint, marker, pencil) and sizes
- Eraser (stroke and area modes, scribble-to-erase)
- Image insertion
- Zoom and pan
Features removed from the UI: notebooks, folders, import/export, background templates, PDF annotation.
This project is about getting handwritten thoughts into Obsidian. If you're looking for tools that help you rediscover those thoughts once they're there:
An AI layer for Obsidian that surfaces connections between your notes — the ones you forgot you made. Semantic search over your vault, concept-level linking, and pattern discovery across everything you've written. < 40 MB bundle, 10x faster initialization than QMD. Lightweight enough to run alongside your vault without friction.
Local-first meeting memos with timestamp-synced transcription. Record a conversation, get a structured note aligned to your audio timeline. Everything stays on your machine.
- Ethran/notable — the actively maintained fork this builds on
- olup/notable — the original project
- Onyx Pen SDK and MyScript HWR engine (via Boox firmware)
- Jetpack Ink for stroke rendering