# rMsync: A Script for Two-Way File Sync Between a PC and the reMarkable

> rMsync is a Python script that pushes local PDFs to a reMarkable tablet and pulls back annotated files as PDFs. It targets users who want a simple, folder-based workflow without relying on the cloud.

**lschwetlick/rMsync** — A script for synchronizing the reMarkable e-reader

- Repository: https://github.com/lschwetlick/rMsync
- Stars: 99 · Forks: 9
- Language: Jupyter Notebook
- License: GPL-3.0
- Published: 2026-08-17 · Updated: 2026-08-18 · Language: en
- Canonical page: https://hysenlabs.com/projects/lschwetlick-rmsync

## What rMsync Solves and Who It Is For

rMsync addresses a narrow but real problem: moving files between a reMarkable e-reader and a PC without using the reMarkable cloud service. The script maintains a local "Library" folder as the single source of truth on the PC side. When new files appear in that folder, rMsync pushes them to the device. When you annotate a file on the reMarkable, the script converts the .rm line data to a PDF and copies it back to the Library with the suffix "_annot". This is aimed at researchers or students who keep a structured folder of papers and books and want a simple, scriptable pipeline. It is not a full synchronization tool like Syncthing or a commercial cloud client. It is a batch operation you run manually, as shown in the usage example: `python3 sync.py -bcu` performs backup, conversion, and upload in one go.

## How the Sync Mechanism Works

The core mechanism is a three-step process controlled by flags. The `-b` or `--backup` flag downloads files from the connected reMarkable to the PC. The `-c` or `--convert` flag takes those backed-up line files and converts them to annotated PDFs and notes. The `-u` or `--upload` flag pushes new files from the local Library directory to the reMarkable. The conversion step relies on external tools: imagemagick and pdftk, plus a separate repository called `rm_tools` from the same author. The script uses a specific directory structure: Literature, Papers, Books, and Notes. Notes are converted to PDF and stored in a Notes directory, and crucially, they are not re-uploaded to the device. This prevents a loop where generated PDFs would be pushed back as new files. The workflow is batch-oriented, not continuous. You run the script, it does its thing, and the next sync is another manual invocation.

## Getting It Running: Commands and Configuration

The README gives a clear usage pattern. You adjust the paths at the top of the script before running it. The command-line arguments are simple: `-b` for backup, `-c` for convert, `-u` for upload, `-d` for a dry run of the upload, and `-p` to purge old backups before making a new one. The example `python3 sync.py -bcu` is a full sync. Dependencies are listed: imagemagick, pdftk, and the rm_tools repository. There is also a link to the reHackable/scripts repository, which is likely a source of helper utilities. The script is written in Python, so you need a Python interpreter. The README does not mention pip or a setup.py, so installation is manual: clone the repository, install dependencies, edit the paths, and run. The dry-run flag `-d` suggests the author used it for debugging, and it is a useful safety net for new users.

## Limitations and Failure Modes

The most obvious limitation is that rMsync is a one-way push and a one-way pull, not a true two-way sync. If you edit a file on both the PC and the reMarkable, the script has no conflict resolution. It will overwrite or duplicate depending on the order of operations. The README does not mention file deletion handling, so if you delete a file locally, it will not be deleted on the device. The conversion step depends on external tools that may not be installed on all systems, and the script was last updated for reMarkable firmware version 2.0.2, as noted in the README. That means newer firmware versions may break the protocol or the file formats. The script is also not a daemon; you must run it manually, so it is wrong for users who expect automatic background syncing. Finally, the README is sparse on error handling, so if a file is corrupted or the device is not connected, the script may fail without clear diagnostics.

## Alternative Approaches and How They Differ

A direct alternative is the reMarkable's built-in cloud sync, which works over Wi-Fi and is automatic. That approach requires a reMarkable account and does not give you a local folder of annotated PDFs unless you export manually. Another alternative is a tool like RCU (remarkable-copy-utility), which is a GUI application that provides drag-and-drop file management and backup. RCU also uses the USB connection but offers a more user-friendly interface and handles the file format conversion internally. The key difference is that rMsync is a script you run from the terminal, giving you a reproducible, command-line-driven workflow that can be integrated into a cron job or a Makefile. RCU is interactive and graphical, which is easier for non-technical users but harder to automate. rMsync also requires you to manage dependencies manually, while RCU packages them in a single binary.

## Maintenance and Licence Considerations

The repository is licensed under GPL-3.0, which means you can use, modify, and distribute it, but any derivative work must also be GPL-licensed. The README shows a single commit date of 8.4.2020 for the firmware update, and the last push is unknown, so maintenance appears to be sporadic. The script is a small, single-purpose tool, so the upgrade cost is low: if the reMarkable changes its file format or USB protocol, you would need to update the script yourself or rely on the author. The dependency on external tools like pdftk and imagemagick means those tools must be kept up to date on your system. There is no package manager integration, so you must clone the repository and manage updates manually. For a production workflow, this could be a liability, but for a personal script, it is acceptable.

## Conclusion

Adopt rMsync if you are comfortable with command-line tools and want a self-contained, cloud-free sync method for reMarkable. Do not use it if you need real-time sync, conflict resolution, or support for newer reMarkable firmware without manual script updates. Before adopting, verify that the external dependencies (imagemagick, pdftk, rm_tools) are installed and that the script works with your reMarkable's current OS version, since the README mentions a specific update from April 2020.

## FAQ

### What does rMsync do with files edited on the reMarkable?

Files that were edited, created or annotated on the device are converted from .rm to .pdf and copied back to your Library folder with the suffix _annot appended. Notes are converted to PDF as well and saved into a Notes directory, and they are not reuploaded to the device.

### How do I run a full rMsync cycle?

python3 sync.py -bcu combines the three phases: backup downloads files from the connected device, convert turns them into annotated PDFs and notes, and upload sends new files from your library directory up to the device. Add -d for a dry upload when you want to rehearse it.

### What does rMsync need installed before it runs?

imagemagick and pdftk as system programs, plus helper scripts taken from the rm_tools directory of the author's maxio repository on its master branch and from the reHackable/scripts repository. None of the four is version pinned in the README.

### Where does rMsync keep its configuration?

In the script itself. The README's instruction is to adjust the paths at the top of the script, so the library location is part of the source file rather than a config file or a command-line flag. The expected layout is a Literature folder containing Papers, Books and Notes.

### Is rMsync still being updated?

The last push to master is dated 2022-05-06 and the repository publishes no releases. The newest note about device compatibility is dated 8.4.2020 and refers to reMarkable version 2.0.2, with an earlier note from 10.6.2019 pointing to a blog explanation of the code.

## Sources

- [Official README](https://github.com/lschwetlick/rMsync#readme)
- [Project repository](https://github.com/lschwetlick/rMsync)
- [README](https://github.com/lschwetlick/rMsync/blob/master/README.md)
- [Releases](https://github.com/lschwetlick/rMsync/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/lschwetlick-rmsync
