RMfuse provides access to your reMarkable Cloud files in the form of a FUSE filesystem

Overview

RMfuse

RMfuse provides access to your reMarkable Cloud files in the form of a FUSE filesystem. These files are exposed either in their original format, or as PDF files that contain your annotations. This lets you manage files in the reMarkable Cloud using the same tools you use on your local system.

Installation

RMfuse requires Python 3.7 or later. It also requires the FUSE3 library. This should be available in most Linuxes (fuse3 and libfuse3-3 in Debian-based distributions) and BSDs. RMfuse may work with macFuse, but that is untested. Windows users may try WinFuse, also untested. Installation of RMfuse and its dependencies will likely require the FUSE3 headers and a C build system (libfuse3-dev and build-essential in Debian).

RMfuse can be installed with pip:

pip install rmfuse

Alternatively, you may clone this repository. Poetry is used for development, so once that is installed you can run

poetry install

Usage

RMfuse installs the script rmfuse. The script takes a single argument, the path at which the filesystem should be mounted. This must be an existing directory. Any files within that directory will be hidden as long as RMfuse is mounted.

mkdir ~/remarkable
rmfuse ~/remarkable

(If you installed with Poetry, you may need to run poetry run rmfuse.)

The first time RMfuse is run, it will need a one-time code to get access to your reMarkable Cloud account. You will be prompted to get that code from https://my.remarkable.com/connect/desktop, which may require logging in to your reMarkable account. RMfuse uses that code to obtain tokens which it uses in the future to authenticate itself.

To unmount and halt RMfuse, use the fusermount command:

fusermount -u ~/remarkable

Modes

RMfuse offers several modes to display your reMarkable Cloud files. You can choose the mode with the -m option.

annot: Displays all files in PDF format, with your annotations added. This is the default mode.

orig: Displays the original file for ebooks and PDF files. Notebooks are rendered as PDF files, as in the annot mode.

raw: Displays all files as ZIP files, reflecting the underlying format used by the reMarkable Cloud. This may be useful when working with other tools that expect files in this form.

meta: Displays metadata about the files in JSON format. Only useful for debugging.

RMfuse provides a special file named .mode in root directory. When read, this file gives the current mode. Writing a valid mode to this file will switch the mode RMfuse is in. Additionally, writing refresh to this file will cause RMfuse to refresh its information from the reMarkable Cloud. (By default, this happens every five minutes.)

~/remarkable $ cat .mode
annot
~/remarkable $ ls
book.pdf        document.pdf    notebook.pdf
~/remarkable $ echo orig > .mode
~/remarkable $ ls
book.epub       document.pdf    notebook.pdf

Capabilities

RMfuse allows reading of all files in the reMarkable Cloud. Since reading the file requires several HTTP requests, as well as local processing, reads make take some time. Running RMfuse in verbose mode (-v or -vv) will display information about the actions underway. The most recent file accessed is cached, to improve performance. More sophisticated caching is planned for the future.

RMfuse does its best to provide accurate metadata for the files. However, the reMarkable Cloud provides only modification dates, so that is reported for creation and access dates as well. File sizes in annot mode are only estimates until the file is read for the first time. This metadata is cached locally to improve responsiveness in the future.

Files can be renamed and moved within the RMfuse filesystem. These changes will be propagated to the reMarkable Cloud. Changes to the file extension will be ignored.

Deleting files from a RMfuse filesystem moves them into the reMarkable Cloud's trash area. These files are accessible in the .trash hidden directory in the root of the file system. Deleting files within the .trash folder removes them from the reMarkable Cloud. (N.B. It is not known if this deletes the files from the cloud, or just hides them from clients.)

EPUB and PDF files may be copied into the filesystem, and new directories can be created. These changes are uploaded to the reMarkable Cloud. Copying other types of files into the RMfuse filesystem will fail silently (unfortunately). File extensions are ignored by RMfuse, and thus may change when files are uploaded. For instance, if book.epub is uploaded and RMFuse is in annot mode, it will show up in the filesystem as book.pdf.

Existing files cannot be edited; they appear in read-only mode. If you want to edit the contents of a file, you will need to copy it to your local filesystem, edit it, and then copy it back to the RMfuse filesystem. This will cause annotations to be lost (in orig mode) or flattened into the document itself (in annot mode).

Known Limitations

  • The file size for annotated files is just an estimate before the file is first read. This can confuse some tools which use the file size to determine how much to read. After reading the file once, the file size will be correctly reported going forward; rerunning these tools a second time is usually enough to get them working.

  • To try to address this, RMfuse throws an error when a program tries to read past the end of a file. This can cause "No data available" errors to be reported. These are harmless.

  • Adding a file other than an EPUB or PDF silently fails. RMfuse does throw an error when it has been given an invalid file, but this comes too late for FUSE to pass the error back to the caller. RMfuse may be able to throw an error earlier, based on the first bytes it receives; this will be investigated in the future.

  • RMfuse caches the most-recently accessed file in memory. This is bad for large files (too much memory used) and small files (we could cache several files). A more sophisticated caching system is planned.

Libraries

RMfuse is powered by rmcl, for accessing the reMarkable Cloud, and by rmrl, for rendering annotated documents. The early development of RMfuse can be found in the rmcl repository

Trademarks

reMarkable(R) is a registered trademark of reMarkable AS. rmrl is not affiliated with, or endorsed by, reMarkable AS. The use of "reMarkable" in this work refers to the company’s e-paper tablet product(s).

Copyright

Copyright 2020-2021 Robert Schroll

RMfuse is released under the MIT license. See LICENSE.txt for details.

Disclaimer of Warranty

RMfuse is provided without any warranty. Users accept the risk of damages, including the loss of data on their local system, on their reMarkable device, and in the reMarkable Cloud.

If it breaks, you get to keep both halves.

Owner
Robert Schroll
Robert Schroll
A tiny Python library for writing multi-channel TIFF stacks.

xtiff A tiny Python library for writing multi-channel TIFF stacks. The aim of this library is to provide an easy way to write multi-channel image stac

23 Dec 27, 2022
RMfuse provides access to your reMarkable Cloud files in the form of a FUSE filesystem

RMfuse provides access to your reMarkable Cloud files in the form of a FUSE filesystem. These files are exposed either in their original format, or as PDF files that contain your annotations. This le

Robert Schroll 82 Nov 24, 2022
useful files for the Freenove Big Hexapod

FreenoveBigHexapod useful files for the Freenove Big Hexapod HexaDogPos is a utility for converting the Freenove xyz co-ordinate system to servo angle

Alex 2 May 28, 2022
pytiff is a lightweight library for reading chunks from a tiff file

pytiff is a lightweight library for reading chunks from a tiff file. While it supports other formats to some extend, it is focused on reading tiled greyscale/rgb images, that can also be bigtiffs. Wr

Big Data Analytics group 9 Mar 21, 2022
A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".

the problem What directory should your app use for storing user data? If running on macOS, you should use: ~/Library/Application Support/AppName If

ActiveState Software 948 Dec 31, 2022
BOOTH宛先印刷用CSVから色々な便利なリストを作成してCSVで出力するプログラムです。

BOOTH注文リスト作成スクリプト このPythonスクリプトは、BOOTHの「宛名印刷用CSV」から、 未発送の注文 今月の注文 特定期間の注文 を抽出した上で、各注文を商品毎に一覧化したCSVとして出力するスクリプトです。 簡単な使い方 ダウンロード 通常は、Relaseから、booth_ord

hinananoha 1 Nov 28, 2021
Python Fstab Generator is a small Python script to write and generate /etc/fstab files based on yaml file on Unix-like systems.

PyFstab Generator PyFstab Generator is a small Python script to write and generate /etc/fstab files based on yaml file on Unix-like systems. NOTE : Th

Mahdi 2 Nov 09, 2021
A bot discord that can create directories, file, rename, move, navigate throw directories etc....

File Manager Discord What is the purpose of this program ? This program is made for a Discord bot. Its purpose is to organize the messages sent in a c

1 Feb 02, 2022
MetaMove is written in Python3 and aims at easing batch renaming operations based on file meta data.

MetaMove MetaMove is written in Python3 and aims at easing batch renaming operations based on file meta data. MetaMove abuses eval combined with f-str

Jan Philippi 2 Dec 28, 2021
Various converters to convert value sets from CSV to JSON, etc.

ValueSet Converters Tools for converting value sets in different formats. Such as converting extensional value sets in CSV format to JSON format able

Health Open Terminology Ecosystem 4 Sep 08, 2022
fast change directory with python and ruby

fcdir fast change directory with python and ruby run run python script , chose drirectoy and change your directory need you need python and ruby deskt

XCO 2 Jun 20, 2022
CredSweeper is a tool to detect credentials in any directories or files.

CredSweeper is a tool to detect credentials in any directories or files. CredSweeper could help users to detect unwanted exposure of credentials (such as personal information, token, passwords, api k

Samsung 54 Dec 13, 2022
This is a junk file creator tool which creates junk files in Internal Storage

This is a junk file creator tool which creates junk files in Internal Storage

KiLL3R_xRO 3 Jun 20, 2021
BREP : Binary Search in plaintext and gzip files

BREP : Binary Search in plaintext and gzip files Search large files in O(log n) time using binary search. We support plaintext and Gzipped files. Benc

Arnaud de Saint Meloir 5 Dec 24, 2021
This python project contains a class FileProcessor which allows one to grab a file and get some meta data and header information from it

This python project contains a class FileProcessor which allows one to grab a file and get some meta data and header information from it. In the current state, it outputs a PrettyTable to txt file as

Joshua Wren 1 Nov 09, 2021
Annotate your Python requirements.txt file with summaries of each package.

Summarize Requirements 🐍 📜 Annotate your Python requirements.txt file with a short summary of each package. This tool: takes a Python requirements.t

Zeke Sikelianos 8 Apr 22, 2022
gitfs is a FUSE file system that fully integrates with git - Version controlled file system

gitfs is a FUSE file system that fully integrates with git. You can mount a remote repository's branch locally, and any subsequent changes made to the files will be automatically committed to the rem

Presslabs 2.3k Jan 08, 2023
PaddingZip - a tool that you can craft a zip file that contains the padding characters between the file content.

PaddingZip - a tool that you can craft a zip file that contains the padding characters between the file content.

phithon 53 Nov 07, 2022
Pti-file-format - Reverse engineering the Polyend Tracker instrument file format

pti-file-format Reverse engineering the Polyend Tracker instrument file format.

Jaap Roes 14 Dec 30, 2022
Generates a clean .txt file of contents of a 3 lined csv file

Generates a clean .txt file of contents of a 3 lined csv file. File contents is the .gml file of some function which stores the contents of the csv as a map.

Alex Eckardt 1 Jan 09, 2022