Files
docker/remarkable/README.md
Borgal b63131c0c5 Add reMarkable backup system with web UI
- Docker container with rmapi cloud backup, PDF conversion pipeline
- Web UI: file browser, multi-select, delete/move, thumbnail preview
- Sync: backup from reMarkable cloud, rmdoc→PDF conversion via rmc+Inkscape
- Excluded-files mechanism to prevent deleted items from returning after sync

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 23:43:36 +01:00

4.3 KiB
Executable File

reMarkable Backup (offizielle Cloud) + lokale Web-UI

Dieses Projekt ist auf einen klaren Workflow reduziert:

  • Tablet bleibt in der offiziellen reMarkable-Cloud (OCR/Convert bleibt aktiv).
  • rmapi laeuft im Docker-Container und zieht periodisch Daten aus der offiziellen Cloud.
  • .rmdoc-Dateien werden automatisch zu PDF konvertiert (Originale bleiben erhalten).
  • Lokale Ablage im Docker-Volume remarkable_notizen mit inkrementellem Stand + datierten Snapshots.
  • Web-UI zum Browsen und Oeffnen von PDFs direkt im Browser.

Dateien in diesem Projekt

/opt/remarkable/
├── docker-compose.yml          Orchestrierung beider Container
├── backup/
│   ├── Dockerfile              Backup-Container (rmapi, rmc, inkscape)
│   └── entrypoint.sh           Cron-Setup + Start
├── scripts/
│   ├── backup-official-cloud.sh  Backup + Snapshot-Versionierung
│   └── convert-to-pdf.sh         .rmdoc → PDF Konvertierung
└── web/
    ├── Dockerfile              Web-UI-Container (PHP)
    ├── index.php               Dateibaum + PDF-Viewer
    └── index2.php              Archiv-Suche

Voraussetzungen

  • Docker + Docker Compose
  • Einmaliger reMarkable-Login (Token wird im Volume gespeichert)

Ersteinrichtung

1. Token einrichten

cd /opt/remarkable
docker compose run --rm --entrypoint bash backup -c "rmapi ls"
# Code von https://my.remarkable.com/device/desktop/connect eingeben

Token wird im Volume remarkable_rmapi-config gespeichert und bleibt bei Container-Updates erhalten.

2. Container starten

cd /opt/remarkable
docker compose up -d

3. Erstes Backup manuell ausfuehren

docker compose exec backup remarkable-backup.sh /data /

Normalbetrieb

Backup + PDF-Konvertierung laufen automatisch per Cron (Standard: taeglich 03:15).

Web-UI erreichbar unter: http://SERVER_IP:8080

Datenstruktur (im Volume remarkable_notizen)

current/          Aktueller Stand (inkl. konvertierter PDFs)
snapshots/
  2026-03-23_031500/
  latest -> ...
logs/

Umgebungsvariablen (docker-compose.yml)

Variable Standard Beschreibung
BACKUP_CRON 15 3 * * * Cron-Zeitplan
SNAPSHOT_KEEP 60 Anzahl aufzubewahrender Snapshots
RUN_ON_START 0 Backup beim Container-Start ausfuehren (1 = ja)

Manuelles Backup mit Optionen

# Vollsync (alle Dateien neu laden)
docker compose exec backup env BACKUP_FULL=1 remarkable-backup.sh /data /

# Spiegelmodus (lokal geloeschte Dateien entfernen)
docker compose exec backup env BACKUP_MIRROR_DELETE=1 remarkable-backup.sh /data /

PDF-Konvertierung (convert-to-pdf.sh)

Das Skript konvertiert alle .rmdoc-Dateien nach dem Backup automatisch zu PDFs.

Verhalten nach Dokumenttyp

Typ Inhalt im rmdoc Ergebnis
Handschrift-Notiz .rm-Dateien Seiten werden einzeln via rmc + inkscape konvertiert und mit pdfunite zusammengefuegt
Importiertes PDF .pdf-Datei PDF wird direkt extrahiert
Reines EPUB nur .epub Wird uebersprungen (kein PDF moeglich)

Seitenreihenfolge

Die Reihenfolge der Seiten wird aus der .content-Datei im rmdoc gelesen. Damit stimmt die Reihenfolge im PDF mit der des Tablets ueberein.

Bekannte Einschraenkungen

  • Custom ARGB-Farben (Highlighter, farbige Stifte): werden als grau dargestellt. rmc 0.3.0 unterstuetzt keine benutzerdefinierten ARGB-Farbcodes. Issue: https://github.com/ricklupton/rmc/issues
  • Neuere rm-Formate: Einige .rm-Dateien enthalten Daten in einem neueren Format als rmscene unterstuetzt — diese Seiten koennen fehlerhaft oder leer erscheinen.

Konvertierung manuell neu ausfuehren

# Alle PDFs loeschen und neu konvertieren
docker compose exec backup bash -c "find /data/current -name '*.pdf' -delete && remarkable-convert.sh /data/current"

# Nur neue/geaenderte Dateien konvertieren (Standard)
docker compose exec backup remarkable-convert.sh /data/current

Warum dieser Aufbau

  • OCR bleibt verfuegbar, weil die offizielle Cloud weiter genutzt wird.
  • Kein Vendor-Lock fuer Aufbewahrung: Daten liegen lokal.
  • .rmdoc-Originale bleiben erhalten — jederzeit zurueckspielbar.
  • Vollstaendig containerisiert: keine Host-Abhaengigkeiten ausser Docker.