diff --git a/KONZEPT.md b/KONZEPT.md index a26c0dd..0b145dd 100644 --- a/KONZEPT.md +++ b/KONZEPT.md @@ -65,7 +65,7 @@ Ein modular aufgebautes System, das bei Disc-Einwurf automatisch den Typ erkennt - Title, Laufzeit, Scene-Labels werden ausgelesen. - Video-Titel wird gegen TMDB API gegengeprüft → Matching-Ergebnis mit Confidence-Score. - Audio-Titel wird gegen MusicBrainz gegengeprüft (bei CD). - - **Rippy zeigt eine Preview im WebUI**: Titel, Jahr, Cover, Scene-Trackliste. + - **Rippy zeigt eine Preview im WebUI**: Titel, Jahr, Cover, Trackliste. - Der Commander kann bestätigen oder manuell korrigieren (z.B. falsches TMDB-Match). - Bestätigte Metadaten werden im SQLite-Cache persistiert. 6. **Ripping** (nach Bestätigung): @@ -185,8 +185,7 @@ Ein modular aufgebautes System, das bei Disc-Einwurf automatisch den Typ erkennt Änderungen: - **Metadaten-Lookup VOR dem Ripping** eingefügt (Sek. 5, Schritt 5) -- **100% Jellyfin-Kompatibilität** hinzugefügt: NFO-Generator, Ordnerstruktur, Poster/Backdrop/ -Fanart-Download, Jellyfin-kompatible Dateibenennung (Sek. 4, Sek. 5, Sek. 6) +- **100% Jellyfin-Kompatibilität** hinzugefügt: NFO-Generator, Ordnerstruktur, Poster/Backdrop/Fanart-Download, Jellyfin-kompatible Dateibenennung (Sek. 4, Sek. 5, Sek. 6) - **Metadaten-Preview im UI** als neuer UX-Schritt (Sek. 7, Schritt 3) - **Neue Risiken**: TMDB-Matching-Fehler (offen, mit Fallback), NFO-Format-Abhängigkeit (Hinweis), Pre-Scan-Latenz (Hinweis), TMDB-Bildrechte (gelöst) diff --git a/README.md b/README.md index 1fc44e6..707e674 100644 --- a/README.md +++ b/README.md @@ -1,66 +1,117 @@ -# Rippy +# Rippy — Automatisches CD/DVD/Blu-ray Ripping-System -Ein modernes, eigenständiges System zum automatischen Rippen von CD, DVD und Blu-ray. -Es erkennt Disc-Einwürfe automatisch, sucht Metadaten vor, rippt verlustfrei und legt -alles in Jellyfin-konformer Struktur ab — mit Echtzeit-UI statt veralteter Flask-Oberfläche. +> **Moderner Ripping-Daemon mit Metadaten-Preview, Jellyfin-Formatierung und Echtzeit-Status.** -## Was du brauchst +--- -- Ein System mit einem optischen Laufwerk (DVD/Blu-ray) -- Docker + Docker Compose -- 1–2 Stunden Zeit für den ersten Bau +## Features -## So legst du los +| Feature | Status | +|---------|--------| +| Disc-Erkennung (CD/DVD/Blu-ray) | ✅ | +| Metadaten-Lookup (TMDB/MusicBrainz/TheTVDB) | ✅ | +| Pre-Scan ohne Ripping | ✅ | +| Jellyfin-Formatierung (NFO + Images) | ✅ | +| JWT-Auth + Rate-Limiting | ✅ | +| React-UI mit Echtzeit-Updates | ✅ | +| SQLite-Cache für API-Rate-Limits | ✅ | +| Multi-Disc-Set-Handling | ✅ | -1. Clone das Repo: - ``` - git clone https://git.tobisniceshomelab.ddnsfree.com/Hitonabi/rippy.git - cd rippy - ``` -2. Lies **KONZEPT.md** — das sagt, was das Projekt ist. -3. Lies **ROADMAP.md** — das sagt, in welcher Reihenfolge es gebaut wird. -4. Fang mit Etappe 1 an (Fundament + udev-Erkennung). +--- -## Entwicklungsumgebung (Docker) +## Architektur -### Starten ``` +┌─────────────────────────────────────────────┐ +│ Proxmox LXC (Debian 12) │ +│ │ +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ +│ │ API │ │ Worker │ │ UI │ │ +│ │ FastAPI │◄─►│ Celery+ │ │ React+ │ │ +│ │ │ │ Redis │ │ Nginx │ │ +│ └──────────┘ └──────────┘ └──────────┘ │ +│ │ │ │ │ +│ ▼ ▼ ▼ │ +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ +│ │ PostgreSQL│ │ udev │ │ Media │ │ +│ │ │ │ Daemon │ │ Store │ │ +│ └──────────┘ └──────────┘ └──────────┘ │ +└─────────────────────────────────────────────┘ +``` + +--- + +## Installation + +### Docker Compose + +```bash +git clone https://git.tobisniceshomelab.ddnsfree.com/Hitonabi/rippy.git +cd rippy docker compose up -d ``` -### Stoppen -``` -docker compose down -``` +### Port-Übersicht -### Logs ansehen -``` -docker compose logs -f -``` +| Service | Port | URL | +|---------|------|-----| +| UI | 80 | http://localhost:80 | +| API | 8000 | http://localhost:8000 | +| PostgreSQL | 5432 | localhost:5432 | +| Redis | 6379 | localhost:6379 | -### Container neu bauen -``` -docker compose build -docker compose up -d -``` +--- -## Etappe 1: Fundament +## API -Aktueller Stand: -- ✅ Docker Compose mit 5 Containern (api, worker, ui, postgres, redis) -- ✅ Basis-Dockerfiles für jeden Service -- ✅ udev-Regel + Daemon für Disc-Einwurf-Erkennung -- ✅ Device-Resolver (UUID/Serial) -- ✅ Celery-Job-Erstellung +### Endpoints -### udev-Integration +| Endpoint | Method | Description | +|----------|--------|-------------| +| `/health` | GET | Health check | +| `/jobs` | GET | Alle Jobs | +| `/devices` | GET | Alle Geräte | +| `/prescan` | POST | Pre-Scan durchführen | +| `/metadata/lookup` | POST | Metadaten lookup | +| `/metadata/confirm` | POST | Metadaten bestätigen | +| `/jellyfin/format` | POST | Für Jellyfin formatieren | +| `/token` | POST | Login (JWT) | +| `/token/refresh` | POST | Refresh Token | +| `/api-keys` | POST/GET/DELETE | API-Key Management | -1. Kopiere `udev/99-disc-ripper.rules` nach `/etc/udev/rules.d/` -2. Kopiere `udev/udev_daemon.py` nach `/app/` (im Worker-Container) -3. Lade udev-Regeln neu: `sudo udevadm control --reload-rules && sudo udevadm trigger` +--- -## Weitere Etappen +## Tech-Stack -Siehe ROADMAP.md für Details zu Etappe 2+. +| Layer | Tech | +|-------|------| +| Backend | Python, FastAPI, Celery | +| Database | PostgreSQL, SQLite, Redis | +| Frontend | React, Vite, TailwindCSS | +| Ripping | MakeMKV, abcde, FFmpeg, HandBrake | +| Auth | JWT, OAuth2 | -Alles andere steht in den Docs. Viel Spaß beim Bauen. +--- + +## Roadmap + +- [x] Etappe 1: Container-Infrastruktur +- [x] Etappe 2: Ripping-Pipeline +- [x] Etappe 3: Metadaten-Lookup + Pre-Scan +- [x] Etappe 4: Jellyfin-Formatierung +- [x] Etappe 5: API + Auth + WebUI +- [ ] Etappe 6: Sicherheit + Compliance +- [ ] Etappe 7: Proxmox-Integration + +--- + +## License + +GPL-v3 + +--- + +## Credits + +- **Commander**: Projekt-Idee, Anforderungen, Testing +- **AI-Box**: Entwicklung, Architektur, Dokumentation diff --git a/ROADMAP.md b/ROADMAP.md index fc8f78d..8540b65 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -61,6 +61,8 @@ - Commander kann bestätigen oder manuell korrigieren - Bestätigte Metadaten werden im Cache persistiert +**Status:** Abgeschlossen + --- ## Etappe 4: Jellyfin-Formatierung + NFO-Generierung @@ -84,6 +86,8 @@ - Jellyfin scannt und erkennt alles korrekt - Multi-Disc-Sets werden als eine Entität angezeigt +**Status:** Abgeschlossen + --- ## Etappe 5: API + Auth + WebUI @@ -109,6 +113,8 @@ - Echtzeit-Updates via SSE funktionieren - Alle Einstellungen werden gespeichert +**Status:** Abgeschlossen + --- ## Etappe 6: Sicherheit + Compliance + Hardening