<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>K@orgmode on Martin Sukany</title><link>https://sukany.cz/tags/k@orgmode/</link><description>Recent content in K@orgmode on Martin Sukany</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Thu, 12 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://sukany.cz/tags/k@orgmode/index.xml" rel="self" type="application/rss+xml"/><item><title>Bridging reMarkable and Emacs Org-mode</title><link>https://sukany.cz/blog/2026-03-12-remarkable-org-mode/</link><pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate><guid>https://sukany.cz/blog/2026-03-12-remarkable-org-mode/</guid><description>&lt;h2 id="why-i-still-write-on-paper"&gt;Why I still write on paper&lt;/h2&gt;
&lt;p&gt;There&amp;rsquo;s something that happens when I pick up a pen that doesn&amp;rsquo;t happen when I open a new buffer. The thinking is different — less filtered, less structured, more honest. Ideas that would never survive the friction of forming a heading and choosing a tag actually get written down. First drafts of decisions, rough task lists, things I&amp;rsquo;m trying to work out, all of it lands on paper before it&amp;rsquo;s ready to be digital.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve tried replacing this with digital tools. Org-capture is excellent for structured input, but for capturing a fleeting thought mid-meeting or sketching out a problem while commuting, I still reach for paper. The reMarkable is my compromise: it&amp;rsquo;s close enough to writing on paper that it doesn&amp;rsquo;t disrupt the thinking, and close enough to a computer that the notes don&amp;rsquo;t stay trapped on dead wood.&lt;/p&gt;
&lt;p&gt;The problem is that notes on a reMarkable and notes in Org-mode don&amp;rsquo;t naturally talk to each other. This post is about the pipeline I built to close that gap.&lt;/p&gt;
&lt;h2 id="the-two-tools-and-why-they-complement-each-other"&gt;The two tools and why they complement each other&lt;/h2&gt;
&lt;p&gt;The reMarkable is good at one thing: letting you write without getting in the way. The e-ink display doesn&amp;rsquo;t glow, doesn&amp;rsquo;t notify you, doesn&amp;rsquo;t tempt you to check anything. The battery lasts days. The pen latency is low enough to feel like paper. Cloud sync happens automatically in the background — you don&amp;rsquo;t think about it. For first-pass capture of any kind of thinking, it&amp;rsquo;s hard to beat.&lt;/p&gt;
&lt;p&gt;Org-mode is good at different things. It&amp;rsquo;s plain text, version-controllable, programmable. It integrates with agenda, GTD-style workflows, time tracking, archiving. When information is in an &lt;code&gt;.org&lt;/code&gt; file, the full Emacs ecosystem is available — you can schedule it, tag it, refile it, clock time on it, link it to other notes. For organizing and acting on information, it&amp;rsquo;s where I want everything to end up.&lt;/p&gt;
&lt;p&gt;The gap is obvious. reMarkable is where I write things down. Org-mode is where things become actionable. Without a bridge, I was manually transcribing notes — which defeats most of the point of capturing on the device in the first place.&lt;/p&gt;
&lt;h2 id="how-the-sync-pipeline-works"&gt;How the sync pipeline works&lt;/h2&gt;
&lt;p&gt;The pipeline has three stages: download, recognize, and structure.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Download&lt;/em&gt; is handled by &lt;code&gt;rmapi&lt;/code&gt;, a command-line client for the reMarkable cloud API. It downloads notebooks as &lt;code&gt;.rmdoc&lt;/code&gt; files — the native reMarkable format, which is essentially a zip archive containing per-page binary stroke data and metadata. I run this for each notebook I want to sync.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Recognition&lt;/em&gt; is where handwriting becomes text. I use the MyScript Cloud API, which accepts raw reMarkable page data and returns recognized text. The API is HMAC-authenticated, accepts batched requests, and handles Latin-script handwriting well enough for practical use. The free tier covers 2000 pages per month, which is more than I need.&lt;/p&gt;
&lt;p&gt;One piece of engineering worth calling out: hash-based deduplication. Before sending a page to the API, the script computes a hash of the page content and compares it against a local cache. If the page hasn&amp;rsquo;t changed since the last run, it&amp;rsquo;s skipped. This matters in practice — a 20-page notebook where you&amp;rsquo;ve written 2 new pages today sends 2 pages to the API, not 20. Quota is preserved, and the run takes seconds.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Structuring&lt;/em&gt; is handled by a Python script that takes the raw recognized text from MyScript and organizes it into Org format. Each notebook becomes an &lt;code&gt;.org&lt;/code&gt; file; pages become headings or entries under headings, depending on how the notebook is organized. The results land in &lt;code&gt;emacs-org/remarkable/&lt;/code&gt;, organized by notebook name. A notebook called &amp;ldquo;Projects&amp;rdquo; on the device becomes &lt;code&gt;emacs-org/remarkable/Projects.org&lt;/code&gt; on disk.&lt;/p&gt;
&lt;p&gt;The whole thing runs nightly via cron at 02:00. By the time I open Emacs in the morning, yesterday&amp;rsquo;s handwritten notes are already there.&lt;/p&gt;
&lt;h2 id="notebook-structure-on-the-device"&gt;Notebook structure on the device&lt;/h2&gt;
&lt;p&gt;I keep three notebooks on the reMarkable that feed into this pipeline: &lt;code&gt;Projects&lt;/code&gt;, &lt;code&gt;Areas&lt;/code&gt;, and &lt;code&gt;Quick Sheets&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Projects&lt;/code&gt; holds working notes tied to specific projects — meeting notes, rough plans, things I&amp;rsquo;m working through. &lt;code&gt;Areas&lt;/code&gt; holds reference material and ongoing concerns that don&amp;rsquo;t have a deadline. &lt;code&gt;Quick Sheets&lt;/code&gt; is the capture inbox: whatever I write when I don&amp;rsquo;t want to think about where it belongs yet. Random ideas, to-do items, things to look up, fragments of thought.&lt;/p&gt;
&lt;p&gt;After nightly sync, Quick Sheets becomes the Org file I triage first. Something like &amp;ldquo;Call Jan re: contract renewal — deadline Friday&amp;rdquo; appears as a plain text entry. Turning it into a scheduled TODO in Emacs takes ten seconds. The capture happened on paper; the action lives in the agenda.&lt;/p&gt;
&lt;h2 id="what-works-well"&gt;What works well&lt;/h2&gt;
&lt;p&gt;HWR accuracy for clean, reasonably paced handwriting is high enough to be useful without heavy editing. Not perfect — there are occasional word-level errors — but close enough that the recognized text is readable and the context is always restorable even when individual words are off.&lt;/p&gt;
&lt;p&gt;The automation itself is reliable. Once the cron job is set up, I don&amp;rsquo;t think about it. Notes appear. The hash deduplication means I can re-run the script manually without worrying about duplicates accumulating.&lt;/p&gt;
&lt;p&gt;The Org integration is the payoff. Once notes are in &lt;code&gt;.org&lt;/code&gt; files, everything Emacs offers is available. Tags, scheduling, refiling into project files, linking to related notes — none of that required any special work on the reMarkable side. The device just needed to get the text into a file.&lt;/p&gt;
&lt;h2 id="limitations-and-honest-trade-offs"&gt;Limitations and honest trade-offs&lt;/h2&gt;
&lt;p&gt;The Czech diacritics problem is real. Fast or slightly sloppy handwriting, especially with Czech-specific characters like &lt;code&gt;ě&lt;/code&gt;, &lt;code&gt;š&lt;/code&gt;, &lt;code&gt;č&lt;/code&gt;, &lt;code&gt;ř&lt;/code&gt;, produces more recognition errors than clean Latin script. &amp;ldquo;Přečíst knihu o Kafkovi&amp;rdquo; might come out as &amp;ldquo;Precist knihu o Kafkovi&amp;rdquo;. Readable and context-restorable, but not clean. For notes that matter, a proofread pass is necessary.&lt;/p&gt;
&lt;p&gt;Symbols don&amp;rsquo;t transfer. Diagrams, arrows, flowcharts, mathematical notation — anything that isn&amp;rsquo;t text is either garbled or empty in the output. A page with a hand-drawn architecture diagram produces only the text labels, if anything. This is a known constraint of the HWR approach, not a bug in the implementation.&lt;/p&gt;
&lt;p&gt;The pipeline is one-directional and always will be. reMarkable is a capture device. You write on it; the notes flow to Org. Nothing flows back. This is fine for my workflow, but worth stating clearly.&lt;/p&gt;
&lt;p&gt;There are two external dependencies worth noting. rmapi requires reMarkable cloud credentials — if you don&amp;rsquo;t want to use the cloud, this pipeline doesn&amp;rsquo;t work as described. MyScript is a third-party API that requires registration and could change pricing or availability. The free tier has been stable, but it&amp;rsquo;s not self-hosted.&lt;/p&gt;
&lt;p&gt;Sync is nightly, not real-time. If I write something at 10pm and need it in Emacs immediately, I run the script by hand. But the default cadence is once a night, and for most of what I write, that&amp;rsquo;s enough.&lt;/p&gt;
&lt;h2 id="how-to-replicate-this"&gt;How to replicate this&lt;/h2&gt;
&lt;p&gt;The setup requires some comfort with Python, command-line tools, and cron. It&amp;rsquo;s not complex, but it&amp;rsquo;s also not a one-click install.&lt;/p&gt;
&lt;p&gt;Tools you need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;rmapi&lt;/em&gt; — CLI for reMarkable cloud. Handles authentication and &lt;code&gt;.rmdoc&lt;/code&gt; download. (&lt;a href="https://github.com/juruen/rmapi"&gt;GitHub: juruen/rmapi&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;MyScript Cloud API&lt;/em&gt; — Handwriting recognition. Register at &lt;a href="https://developer.myscript.com/"&gt;developer.myscript.com&lt;/a&gt; for a free API key. The batch endpoint accepts reMarkable page data directly.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Python 3&lt;/em&gt; — For the post-processing script that structures recognized text into Org format. Standard library is sufficient; no exotic dependencies.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;cron&lt;/em&gt; — For nightly scheduling.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The rough flow: configure rmapi with your reMarkable credentials, register for a MyScript API key, wire up the Python script to call both, point it at your Org directory, and schedule it. The deduplication cache is a simple JSON file mapping page hashes to recognized text — straightforward to implement.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not publishing the script as a ready-made package because it&amp;rsquo;s too tied to my specific notebook structure and Org conventions. But the components are all documented, the API is straightforward, and the overall architecture is simple enough to re-implement in an afternoon.&lt;/p&gt;
&lt;p&gt;The result: I write on paper and my agenda knows about it by morning. Not magic — just a cron job and a working API key.&lt;/p&gt;</description></item></channel></rss>