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>
This commit is contained in:
128
remarkable/README.md
Executable file
128
remarkable/README.md
Executable file
@@ -0,0 +1,128 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user