Fetches handwritten notes from reMarkable cloud, transcribes to Norwegian markdown via Claude Vision API, and saves .md files ready for Obsidian.
Supports reMarkable .rm files in both v5 and v6 format (via rmscene).
brew install io41/tap/rmapi
rmapi # follow the auth prompt the first timecd ~/Code/Remardown
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtCreate .env in the project directory:
ANTHROPIC_API_KEY=your-key
source .venv/bin/activate
python3 remarkable_to_obsidian.py # list documents
python3 remarkable_to_obsidian.py --list # same as above
python3 remarkable_to_obsidian.py --id "DocumentName" # convert one document
python3 remarkable_to_obsidian.py --all # convert all documents
python3 remarkable_to_obsidian.py --out <path> --all # custom output directoryDefault output: ./output/
With --split, the output is divided into separate markdown files based on ## headings and --- separator lines in the transcribed content:
python3 remarkable_to_obsidian.py --id "DocumentName" --split
python3 remarkable_to_obsidian.py --all --splitFilename: YYYY-MM-DD DocumentName - SectionTitle.md
If the content has only one or no sections, it is saved as a single file as usual.
--batch-size controls how many pages are sent per API call. A lower value gives Claude better context per page and thus more/better sections with --split:
python3 remarkable_to_obsidian.py --id "DocumentName" --split --batch-size 5 # 5 pages per call
python3 remarkable_to_obsidian.py --id "DocumentName" --split --batch-size 1 # 1 page per callDefault is 90. Cost is roughly the same regardless of batch size (the images cost the same in tokens).
The script tracks which pages have already been processed in .processed.json. On repeated runs, only new pages are sent to Claude, and the text is appended to the existing .md file.
Delete .processed.json to force a full re-processing:
rm .processed.jsonFiles are saved as YYYY-MM-DD DocumentName.md with YAML frontmatter (tittel, kilde, dato, tags).
anthropic— Claude Vision API for transcriptionpymupdf— PDF/PNG renderingrmscene— Parsing of reMarkable v6.rmfilespython-dotenv— Environment variables from.env