- 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>
129 lines
4.3 KiB
Markdown
Executable File
129 lines
4.3 KiB
Markdown
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
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
cd /opt/remarkable
|
|
docker compose up -d
|
|
```
|
|
|
|
### 3. Erstes Backup manuell ausfuehren
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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.
|