docs: SAVEPOINT v3.2, ROADMAP Etappe 13 + Ideen-Katalog, README-Ausbau, KONZEPT-Fortschreibungen
Ampel / ampel (push) Successful in 29s

- README: Media-Server-Ablage, Benachrichtigungen (Tabelle je Dienst),
  System/MakeMKV-Key, UHD-Arbeitsverzeichnis, neuer Abschnitt 'Rippy
  woanders bereitstellen' (beliebiger Docker-Host, was NICHT mitmuss).
- ROADMAP: Etappe 13 (Universal-Komfort-Runde) dokumentiert, erledigte
  Punkte aus Etappe 11/12 abgehakt, priorisierter Ideen-Katalog.
- KONZEPT: Abschnitt 10 'Fortschreibungen' — Media-Server-Neutralitaet
  erweitert das Jellyfin-Muss (keine Abweichung), Benachrichtigungen,
  udev->ioctl.
- SAVEPOINT v3.2 mit dem Kernbefund: Ampel war seit 23.07. rot, stable
  hing 10 Commits zurueck (bcrypt/passlib + veralteter Test) — behoben.
- AGENTS: Stand-Sektion entschlackt (Details leben im SAVEPOINT).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-07-24 08:55:55 +02:00
parent 13c1ae6064
commit 5d9be4d046
6 changed files with 189 additions and 13 deletions
+2
View File
@@ -19,4 +19,6 @@ OMDB_API_KEY=
# MakeMKV-Beta-Key (optional): DVDs gehen ohne, Blu-ray läuft 30 Tage im # MakeMKV-Beta-Key (optional): DVDs gehen ohne, Blu-ray läuft 30 Tage im
# Testmodus. Aktueller Key: Forum-Thread "MakeMKV is free while in beta". # Testmodus. Aktueller Key: Forum-Thread "MakeMKV is free while in beta".
# Wechselt etwa monatlich — bei Blu-ray-Fehlern zuerst hier schauen. # Wechselt etwa monatlich — bei Blu-ray-Fehlern zuerst hier schauen.
# Bequemer: im UI unter Einstellungen → System eintragen (gilt ab dem
# nächsten Rip, ohne Neustart, und schlägt diesen Env-Wert).
MAKEMKV_APP_KEY= MAKEMKV_APP_KEY=
+6 -5
View File
@@ -53,9 +53,10 @@ Bibliotheks-APIs: `--help`/Doku prüfen und die Fundstelle im Commit nennen.
- Kein Proxmox-LXC-Nesting-Workaround — das Projekt lebt bewusst in normalem Docker. - Kein Proxmox-LXC-Nesting-Workaround — das Projekt lebt bewusst in normalem Docker.
- Kein ARM-Fork — Rippy ist ein Eigenbau von Grund auf. - Kein ARM-Fork — Rippy ist ein Eigenbau von Grund auf.
## Aktueller Stand (21.07.2026) ## Aktueller Stand (24.07.2026)
-**Etappe 8 abgeschlossen:** Dark Mode mit Theme-Toggle, React-UI mit TailwindCSS -**E2E bewiesen (v3.1):** BD-50 komplett durch die Kette (43 GB → 4,8 GB)
-**Git Sync:** Arcane VM (192.168.178.162) mit Git Repository konfiguriert -**Etappe 13 (v3.2):** Universal-Komfort-Runde — Media-Server-Integration,
-**Savepoint v1.8:** Separation of Concerns geplant, Dark Mode implementiert echte Benachrichtigungen, SMB-Klartext-Fehler, UHD-Arbeitsverzeichnis,
- 📝 **Nächste Etappe:** SoC-Refactoring (Theme-Context auslagern) MakeMKV-Key via UI, Job-Detail-Popup, Toast-Feedback, Ampel-Blocker behoben
- 📝 **Details immer in SAVEPOINT.md** — diese Sektion nennt nur die Etappe
+14
View File
@@ -161,3 +161,17 @@ Ein modular aufgebautes System, das bei Disc-Einwurf automatisch den Typ erkennt
- Neue Risiken: TMDB-Matching-Fehler (mit Fallback), NFO-Format-Abhängigkeit (Hinweis), Pre-Scan-Latenz (Hinweis) - Neue Risiken: TMDB-Matching-Fehler (mit Fallback), NFO-Format-Abhängigkeit (Hinweis), Pre-Scan-Latenz (Hinweis)
**Ergebnis:** Konzept ist wasserdicht für MVP-Phase. **Ergebnis:** Konzept ist wasserdicht für MVP-Phase.
## 10. Konzept-Fortschreibungen (dokumentierte Erweiterungen, keine Abweichungen)
- **24.07.2026 — Media-Server-Neutralität:** Die Jellyfin-Muss-Features
(Ordnerstruktur, NFO, Poster) bleiben vollständig bestehen; sie sind jetzt
über das Setting `mediaServer` auf Emby und Kodi ausgeweitet (identisches
Kodi-NFO-Schema) und für Plex auf die reine Benennung reduziert. Jellyfin
bleibt Referenz- und Empfehlungssystem im Einrichtungs-Assistenten.
- **24.07.2026 — Benachrichtigungen:** Webhook bei Job-Ende (Discord/Slack/
ntfy/generisch) als gebautes Feature — im UX-Flow Punkt 10 („Abschluss")
war das als Protokollierung angelegt, jetzt meldet Rippy aktiv.
- **23./24.07.2026 — udev → ioctl:** Der im Konzept beschriebene udev-Daemon
ist im Container prinzipbedingt nicht lauffähig; die Disc-Wache pollt per
Kernel-ioctl (3 s) — gleiches Verhalten, universell lauffähig.
+60 -4
View File
@@ -44,17 +44,29 @@ NICHT als emuliertes CD-ROM (`media=cdrom`), das kann keine SCSI-Kommandos.
1. **Disc-Wache** (ioctl-Polling, kein udev-Gefrickel) erkennt Einlegen, 1. **Disc-Wache** (ioctl-Polling, kein udev-Gefrickel) erkennt Einlegen,
identifiziert die Disc (Volume-Label → TMDB → OMDb-Fallback) und zeigt identifiziert die Disc (Volume-Label → TMDB → OMDb-Fallback) und zeigt
sie mit Poster auf dem Dashboard. sie mit Poster auf dem Dashboard. Klick auf einen Job-Titel öffnet die
Detail-Ansicht (Poster, Jahr, Beschreibung, Ablagepfad).
2. **Rip** (MakeMKV, verlustfrei — der einzige Weg durch AACS): Ziel wählst 2. **Rip** (MakeMKV, verlustfrei — der einzige Weg durch AACS): Ziel wählst
du beim Start (Filme/Serien/Musik/eigener Pfad, inkl. Netzwerk-Ziele). du beim Start (Filme/Serien/Musik/eigener Pfad, inkl. Netzwerk-Ziele).
Vor dem Start prüft Rippy den freien Platz gegen die Disc-Größe.
Audio-CDs laufen über abcde → FLAC + MusicBrainz. Audio-CDs laufen über abcde → FLAC + MusicBrainz.
3. **Kompression** (HandBrake, eigener Job auf eigener Queue): x265/x264, 3. **Kompression** (HandBrake, eigener Job auf eigener Queue): x265/x264,
Preset im UI wählbar; Rohdatei wird erst nach Erfolg gelöscht Preset im UI wählbar; Rohdatei wird erst nach Erfolg gelöscht
(„Original behalten" als Option). Fehlgeschlagene Kompressionen lassen („Original behalten" als Option). Fehlgeschlagene Kompressionen lassen
sich ohne Neu-Rip neu anstoßen. sich ohne Neu-Rip neu anstoßen.
4. **4K-UHD**: braucht ein LibreDrive-fähiges Laufwerk (MakeMKV-Forum: 4. **Media-Server-Ablage**: Unter Einstellungen → Ripping (oder im
Einrichtungs-Assistenten) wählst du dein System — Jellyfin, Emby, Kodi,
Plex oder keins. Fertige Rips heißen dann „Titel (Jahr)" statt
Job-UUID; für Jellyfin/Emby/Kodi legt Rippy zusätzlich movie.nfo +
poster.jpg dazu (Kodi-NFO-Schema, lesen alle drei nativ). Plex nutzt
nur die Benennung.
5. **4K-UHD**: braucht ein LibreDrive-fähiges Laufwerk (MakeMKV-Forum:
„Ultimate UHD Drives Flashing Guide"). Normale BD/DVD gehen mit jedem „Ultimate UHD Drives Flashing Guide"). Normale BD/DVD gehen mit jedem
Laufwerk. Laufwerk. ⚠️ UHD-Rohdaten sind bis 100 GB groß — wenn die Platte der
Rippy-Maschine dafür zu klein ist, lege das **Arbeitsverzeichnis**
(Einstellungen → Verarbeitung) auf eine eingehängte Freigabe, z. B.
`/app/media/nas-arbeit`. Rippy bricht sonst VOR dem Rip mit einer
Klartext-Meldung ab statt nach 40 GB mit voller Platte.
## Speicherziele (NAS, Freigaben) ## Speicherziele (NAS, Freigaben)
@@ -67,6 +79,28 @@ Containern. ⚠️ Zugangsdaten liegen unverschlüsselt in der lokalen
Postgres-DB — bewusster Heimnetz-Kompromiss; lege fürs NAS einen eigenen, Postgres-DB — bewusster Heimnetz-Kompromiss; lege fürs NAS einen eigenen,
eingeschränkten Benutzer an. eingeschränkten Benutzer an.
## Benachrichtigungen
**Einstellungen → Benachrichtigungen**: eine Webhook-URL eintragen, „Test
senden" drücken, speichern — fertig. Rippy meldet Job-Ende (fertig,
fehlgeschlagen, abgebrochen) und erkennt den Dienst an der URL selbst:
| Dienst | URL-Beispiel | Format |
|---|---|---|
| Discord | `https://discord.com/api/webhooks/…` | `{"content": …}` |
| Slack | `https://hooks.slack.com/services/…` | `{"text": …}` |
| ntfy (Handy-Push) | `https://ntfy.sh/mein-geheimes-thema` | Roh-Text + Titel |
| Eigenes (HA, n8n, …) | beliebige HTTPS-URL | `{"title","message","level"}` |
## System & MakeMKV-Beta-Key
**Einstellungen → System** zeigt die Werkzeug-Versionen jedes Workers
(MakeMKV, HandBrake), den Key-Status und den freien Speicherplatz. Der
MakeMKV-Beta-Key (wechselt ~monatlich, Forum-Thread t=1053) wird hier im
UI eingetragen und gilt ab dem **nächsten Rip** — ohne Rebuild, ohne
Neustart; er schlägt den Key aus der `.env`. Nur die MakeMKV-*Version*
steckt im Image: `docker compose build worker && docker compose up -d worker`.
## Verarbeitung & Hardware ## Verarbeitung & Hardware
**Einstellungen → Verarbeitung** zeigt ehrlich an, welche Encoder deine **Einstellungen → Verarbeitung** zeigt ehrlich an, welche Encoder deine
@@ -88,11 +122,33 @@ eingebaute CPU-Worker alles selbst — Rippy bleibt All-in-one.
| `TMDB_API_KEY` | empfohlen | Metadaten — alternativ im UI/Wizard eintragbar | | `TMDB_API_KEY` | empfohlen | Metadaten — alternativ im UI/Wizard eintragbar |
| `OMDB_API_KEY` | optional | zweite Metadaten-Quelle (Fallback) | | `OMDB_API_KEY` | optional | zweite Metadaten-Quelle (Fallback) |
| `THETVDB_API_KEY` | optional | Serien-Fallback | | `THETVDB_API_KEY` | optional | Serien-Fallback |
| `MAKEMKV_APP_KEY` | optional | MakeMKV-Beta-Key (Forum); DVDs gehen ohne | | `MAKEMKV_APP_KEY` | optional | MakeMKV-Beta-Key (Forum); DVDs gehen ohne — bequemer: im UI unter Einstellungen → System pflegen |
| `MAKEMKV_URL_BASE` | optional | alternative Download-Quelle für den Image-Build | | `MAKEMKV_URL_BASE` | optional | alternative Download-Quelle für den Image-Build |
UI-Einstellungen (Wizard/Settings) überstimmen die Env-Variablen. UI-Einstellungen (Wizard/Settings) überstimmen die Env-Variablen.
## Rippy woanders bereitstellen
Rippy ist reines Docker Compose — es läuft auf **jedem Linux-Host mit
Docker**, nicht nur auf der Original-VM. Es gibt (noch) keine fertigen
Registry-Images; gebaut wird beim ersten `up` direkt aus dem Repo.
Voraussetzungen auf dem Ziel-Host:
1. Linux (x86_64) mit Docker + Compose-Plugin.
2. Ein optisches Laufwerk, das der Host sieht (`ls /dev/sr* /dev/sg*`).
In einer VM: per **USB-Passthrough** (Vendor-ID) durchreichen, NICHT
als emuliertes CD-ROM — siehe „Laufwerk anpassen" oben.
3. Ablage-Basis anlegen: `mkdir -p /srv/rippy/media` (oder Pfad in
`docker-compose.yml` anpassen — muss ein rshared-fähiger Bind sein).
Dann wie im Schnellstart: klonen, `.env` füllen, `docker compose up -d
--build`, `http://<host>` öffnen — der Einrichtungs-Assistent führt durch
den Rest (API-Keys, Media-Server, Verarbeitung). Updates: `git pull &&
docker compose up -d --build`.
Nicht mitnehmen musst du: Gitea, Arcane, den CI-Runner — das ist die
Entwicklungs-Infrastruktur DIESER Installation, nicht Teil von Rippy.
## Entwicklung ## Entwicklung
CI („Ampel") läuft bei jedem Push: Ruff, pytest, Vite-Build. Grün auf CI („Ampel") läuft bei jedem Push: Ruff, pytest, Vite-Build. Grün auf
+63 -3
View File
@@ -249,7 +249,9 @@ Bind-Mounts statt devices: (EPERM), UI rief hartkodiert localhost:8000 auf.
- [x] /settings-Endpoints (Settings-Seite sprach vorher ins Leere) - [x] /settings-Endpoints (Settings-Seite sprach vorher ins Leere)
- [x] UI: Vite-Build + nginx mit /api-Proxy statt Dev-Server; relative API-Pfade - [x] UI: Vite-Build + nginx mit /api-Proxy statt Dev-Server; relative API-Pfade
- [x] compose: devices: statt Bind-Mounts; Ausgabe aufs media-Volume - [x] compose: devices: statt Bind-Mounts; Ausgabe aufs media-Volume
- [ ] Jellyfin-Post-Processing an den Worker anbinden (NFO/Poster nach dem Rip) - [x] Jellyfin-Post-Processing an den Worker anbinden (NFO/Poster nach dem
Rip) — 24.07., medien.py: Ordner „Titel (Jahr)" + movie.nfo + poster.jpg,
gesteuert übers mediaServer-Setting (Jellyfin/Emby/Kodi/Plex/keins)
- [ ] Auth vor die schreibenden Endpoints (JWT existiert, schützt aber nichts) - [ ] Auth vor die schreibenden Endpoints (JWT existiert, schützt aber nichts)
--- ---
@@ -280,8 +282,9 @@ Jellyfin-Konvention nativ (ARM kann nur Emby-Refresh, keine NFOs).
erlaubt nur EINE Auswahl). erlaubt nur EINE Auswahl).
- [ ] **Min/Max-Titellänge + Extras**: Bonusmaterial nach extras/ (versteht - [ ] **Min/Max-Titellänge + Extras**: Bonusmaterial nach extras/ (versteht
Jellyfin nativ) statt alles flach. Jellyfin nativ) statt alles flach.
- [ ] **Apprise-Benachrichtigungen**: eine Lib für Telegram/Discord/…, - [x] **Benachrichtigungen bei Job-Ende** — 24.07., eigenes notify-Modul
Hooks auf job_completed/failed/awaiting_selection, Deep-Link ins UI. (Discord/Slack/ntfy/generisches JSON, Dienst-Erkennung an der URL)
statt Apprise-Dependency; Test-Knopf im UI. Telegram/Deep-Links offen.
- [ ] **Multi-Drive-Verwaltung**: drives-Tabelle (Seriennummer, Custom-Name, - [ ] **Multi-Drive-Verwaltung**: drives-Tabelle (Seriennummer, Custom-Name,
UHD-fähig-Flag), parallele Rips, Job↔Drive-Zuordnung. UHD-fähig-Flag), parallele Rips, Job↔Drive-Zuordnung.
- [ ] **Backup-Modus** (makemkvcon backup --decrypt) als Plan B für Problem-Discs. - [ ] **Backup-Modus** (makemkvcon backup --decrypt) als Plan B für Problem-Discs.
@@ -294,3 +297,60 @@ Jellyfin-Konvention nativ (ARM kann nur Emby-Refresh, keine NFOs).
„Show/Season 02/Show S02E05.mkv" im Preview bestätigen. „Show/Season 02/Show S02E05.mkv" im Preview bestätigen.
- [ ] **Main-Feature per Laufzeitabgleich** mit TMDB-Runtime (±3 min) statt - [ ] **Main-Feature per Laufzeitabgleich** mit TMDB-Runtime (±3 min) statt
ARMs „größte Datei gewinnt" (#1297-Fehlklasse). ARMs „größte Datei gewinnt" (#1297-Fehlklasse).
---
## Etappe 13 (24.07.2026): Universal-Komfort-Runde — Lücken aus dem Alltag schließen
**Quelle:** Commander-Sammelauftrag 24.07. — alles, was beim echten Benutzen
auffiel, in einem Rutsch. Alles gebaut, Tests dabei, Ampel-Blocker behoben.
**Gebaut:**
- [x] **Ampel entrostet**: bcrypt auf 4.0.1 gepinnt (passlib-1.7.4-Bruch) und
cache_keys-Test an das Fingerprint-Format vom 23.07. angepasst — DIE
beiden Rot-Ursachen, wegen derer `stable` 10 Commits zurückhing.
- [x] **Media-Server-Integration**: mediaServer-Setting (Wizard + Einstellungen),
Zielordner „Titel (Jahr)", movie.nfo/tvshow.nfo + poster.jpg für
Jellyfin/Emby/Kodi (medien.py im Worker, mit Tests).
- [x] **Benachrichtigungen echt gemacht**: notify.py (API+Worker), Meldung bei
fertig/fehlgeschlagen/abgebrochen, Anleitung + Test-Knopf im UI —
das Webhook-Feld war vorher ein Placebo, nichts hat je gesendet.
- [x] **SMB-Freigaben-Scan repariert**: NT_STATUS-Fehler → Klartext (Gast-
Abfrage verweigert ⇒ Benutzer/Passwort nötig), Credential-Felder im UI
VOR den „Freigaben auflisten"-Knopf gezogen.
- [x] **4K-UHD-Platzproblem**: Arbeitsverzeichnis konfigurierbar (workDir,
z. B. NAS-Freigabe), Platz-Check per Disc-Größe (ioctl) VOR dem Rip.
- [x] **MakeMKV-Key über UI** (Einstellungen → System): gilt ab dem nächsten
Rip, ohne Rebuild; Worker melden Werkzeug-Versionen + Key-Quelle.
- [x] **Job-Detail-Popup**: Klick auf Titel in „Neueste Jobs" → Poster, Jahr,
Beschreibung, Ablagepfad, Fehler (Job speichert Metadaten jetzt mit).
- [x] **UI-Feedback überall**: Toast-System (reinploppende Meldungen), drehende
Refresh-Knöpfe, Logs-Filter um Warnung/Fehler-Pills ergänzt.
- [x] **Datei-Browser zeigt Dateien**: Ordner wirkten „leer", weil nur
Unterordner gelistet wurden — Dateien erscheinen jetzt grau mit Größe.
- [x] Favicon (Disc im Logo-Verlauf) + Footer „Created with ❤️ by LucyAI,
Claude and KrBrZ".
- [x] README: Media-Server, Benachrichtigungen, UHD-Arbeitsverzeichnis,
„Rippy woanders bereitstellen" (beliebiger Docker-Host).
**Offen aus dieser Runde:** nichts — Rest siehe Etappe 12 und Ideen unten.
---
## Ideen-Katalog (24.07.2026, priorisiert) — Lücken, die noch offen sind
1. **Serien-Staffel-Flow**: Beim Rippen einer Serien-Disc Staffel/Disc-Nr
abfragen → Ablage `Show/Season 02/`, Episoden-Matching wie Etappe 12.
2. **Duplikat-Warnung**: Disc-Fingerprint schon in der Job-Historie →
„schon am X gerippt — trotzdem?" (Fingerprint-Infrastruktur existiert).
3. **Jellyfin-Bibliotheks-Refresh** nach Ablage (API-Key + URL in den
Einstellungen, POST /Library/Refresh) — der letzte Schritt zur
Null-Klick-Kette Disc→Bildschirm.
4. **Track-Auswahl vor dem Rip** (awaiting_selection, Etappe 12) — spart
bei Bonus-Material-Discs Stunden.
5. **Auth vor schreibende Endpoints** + Login-Flow im UI (JWT existiert).
6. **Speicherplatz-Kachel im Dashboard** (Media/Arbeitsverzeichnis als
Balken — /system/info liefert die Daten schon).
7. **Rip-Historie exportieren** (CSV/JSON) für die Sammlung-Übersicht.
8. **Design 2.0**: Design-Tokens statt Theme-Ternaries in jeder Zeile —
die `theme === 'dark' ? … : …`-Kaskaden sind der größte UI-Schuldenberg.
+44 -1
View File
@@ -1,6 +1,49 @@
# SAVEPOINT — Rippy # SAVEPOINT — Rippy
## Aktueller Stand: v3.1 — E2E BEWIESEN + Universal-Runde (24.07.2026, Claude) ## Aktueller Stand: v3.2 — Universal-Komfort-Runde + Ampel entrostet (24.07.2026, Claude)
**Wichtigster Befund zuerst: die Ampel war seit dem 23.07. ROT und `stable`
hing 10 Commits hinter `main`** — deshalb kam nichts Neues mehr auf die VM.
Zwei Ursachen, beide behoben:
1. bcrypt ≥ 4.1 bricht passlib 1.7.4 (`__about__` entfernt → Selbsttest wirft
„password cannot be longer than 72 bytes") → **bcrypt==4.0.1 gepinnt**.
2. Der cache_keys-Test kannte den Disc-Fingerprint im Prescan-Key (23.07.)
nicht → Test an das echte Format angepasst + Fingerprint-Testfall dazu.
**Neu in v3.2 (Commander-Sammelauftrag, alles mit Tests / Vite-Build grün):**
- **Media-Server-Integration**: Setting `mediaServer` (Wizard + Einstellungen →
Ripping): Zielordner „Titel (Jahr)" statt Job-UUID; für Jellyfin/Emby/Kodi
zusätzlich movie.nfo/tvshow.nfo + poster.jpg (Worker: medien.py). Plex = nur
Benennung. Job speichert Disc-Metadaten jetzt mit (jobs.meta, Migration).
- **Benachrichtigungen ECHT**: notify.py in API+Worker (Discord/Slack/ntfy/
generisch, Erkennung an der URL) — das Feld war vorher ein Placebo. Meldung
bei fertig/fehlgeschlagen/abgebrochen; Anleitung + „Test senden" im UI.
- **SMB-Scan-Fix**: „NT_STATUS_ACCESS_DENIED" heißt jetzt im Klartext „Gast-
Abfrage verweigert → Benutzer/Passwort eintragen"; Credential-Felder stehen
im UI VOR dem Auflisten-Knopf. NAS-Ziel-Anlage quittiert per Toast.
- **4K-UHD-Vorsorge**: Arbeitsverzeichnis `workDir` konfigurierbar (auf
NAS-Freigabe legbar), Platz-Check per Disc-Größe (ioctl) VOR dem Rip mit
Klartext-Abbruch statt voller Platte bei 40 GB.
- **Einstellungen → System**: Werkzeug-Versionen je Worker (MakeMKV/HandBrake,
ENV MAKEMKV_VERSION im Image), Key-Quelle (ui/env/keiner), freier Platz;
**MakeMKV-Beta-Key im UI pflegbar** — gilt ab dem nächsten Rip, ohne Rebuild.
- **Job-Detail-Popup** (Klick auf Titel in „Neueste Jobs"): Poster, Jahr,
Beschreibung, Genres, Ablagepfad, Fehler (GET /jobs/{id}/detail).
- **UI-Feedback**: Toast-System (ToastContext, ploppt oben rechts), drehende
Refresh-Knöpfe, Logs-Pills um Warnung/Fehler ergänzt, Datei-Browser zeigt
jetzt auch DATEIEN (grau, mit Größe) — der „leere" Bluray-Ordner war voll.
- **Favicon** (Disc, Indigo-Verlauf) + **Footer** „Created with ❤️ by LucyAI,
Claude and KrBrZ".
- **Doku**: README (Media-Server, Benachrichtigungen, UHD-Arbeitsverzeichnis,
„Rippy woanders bereitstellen"), ROADMAP Etappe 13 + Ideen-Katalog,
KONZEPT-Fortschreibungen (Abschnitt 10), AGENTS-Stand.
**Nächste Schritte:** unverändert die Fäden aus v3.1 (unten) + Ideen-Katalog
in der ROADMAP (Serien-Flow, Duplikat-Warnung, Jellyfin-Refresh, Auth).
---
## Vorheriger Stand: v3.1 — E2E BEWIESEN + Universal-Runde (24.07.2026, Claude)
**Der Beweis steht: Evangelion 2.22 (BD-50) komplett durch die Kette** **Der Beweis steht: Evangelion 2.22 (BD-50) komplett durch die Kette**
erkannt → verlustfrei gerippt (43 GB, LibreDrive) → H.264-komprimiert → erkannt → verlustfrei gerippt (43 GB, LibreDrive) → H.264-komprimiert →