rmtemplate

July 21, 2026 · View on GitHub

A command-line tool for managing custom templates on reMarkable Paper Pro and Paper Pro Move devices. It uploads template files over SSH and registers them in the device's templates JSON, so you don't have to hand-edit templates.json or restart xochitl yourself.

Requirements

  • Python 3.9+
  • SSH access to the device (enabled in Settings > About > Copyrights and licenses, or Settings > Storage on newer firmware)

Install

pip install paramiko scp

Then either run rmtemplate.py directly, or install it as a rmtemplate command:

pip install .

Usage

rmtemplate.py connect --host 10.11.99.1 --password abc123
rmtemplate.py list
rmtemplate.py add watch-log.svg --name "Watch Log" --category "Planners"
rmtemplate.py remove --name "Watch Log"
rmtemplate.py backup
rmtemplate.py restore ~/.rmtemplate/backups/templates.json.20260101_120000.bak
rmtemplate.py restart
rmtemplate.py icons

connect saves the device IP and SSH password to ~/.rmtemplate/config.ini (permissions are set to owner-read/write only) so later commands don't need --host/--password. Every command still accepts them directly if you'd rather not persist credentials to disk.

Commands

CommandDescription
connectSave device IP and SSH password for later commands
listList all registered templates
addUpload a .svg/.png file and register it as a template
removeUnregister a template, optionally deleting its file
backupSave the current templates JSON to ~/.rmtemplate/backups
restoreRestore templates JSON from a backup file
restartRestart xochitl to pick up changes
iconsList available icon names and their hex codes

Sample templates

templates/ has example templates you can install with add. The Paper Pro and Paper Pro Move have different screens (1620x2160 portrait vs. 1696x954 landscape), so each template ships as two files — pick the one matching your device:

TemplatePaper ProPaper Pro Move
Movie watch logmovie-watch-log-pro.svgmovie-watch-log-move.svg
Book logbook-log-pro.svgbook-log-move.svg
Workout trackerworkout-tracker-pro.svgworkout-tracker-move.svg
rmtemplate.py add templates/movie-watch-log-pro.svg --name "Movie Watch Log" --category "Planners"

add figures out landscape vs. portrait from the file's own dimensions and sets the JSON entry accordingly — you don't need to tell it which variant you're uploading.

They're styled to match reMarkable's own templates — hairline strokes at varying opacity instead of solid gray, dashed minor guide lines, and text rendered as vector outlines rather than <text> elements (the on-device SVG renderer's font handling isn't something to rely on). scripts/gen_templates.py generates all six from a shared layout system; run python scripts/gen_templates.py after editing it to regenerate them.

Notes

  • SSH host keys are trusted automatically on first connect (AutoAddPolicy). This is convenient for a device on your own LAN but means there's no protection against a spoofed host; be aware of that tradeoff.
  • backup saves the templates JSON and a listing of files in the templates directory, not copies of the template images themselves.
  • The four categories and the icon codes in icons are taken directly from a real device's templates.json (built-in entries), not guessed — the picker UI only shows a fixed set of category tabs, so a category outside that set means a template won't appear under any tab.

License

MIT, see LICENSE.