- merge-annotations.py: rmscene GlyphRange-Blöcke auslesen und als SVG-Rects rendern - Koordinaten: rmscene screen-px × 72/226 → SVG-Punkte (identisch mit rmc-Skalierung) - Farben: fill='rgb(...)' + fill-opacity statt rgba() (Inkscape-Kompatibilität) - Highlights werden VOR Stift-Annotationen eingefügt (korrekte Z-Order) - Dockerfile: rmscene==0.6.1 (rmrl+rmscene>=0.7.0 waren inkompatibel mit rmc)
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).
rmapilaeuft 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_notizenmit 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.
rmc0.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 alsrmsceneunterstuetzt — 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.