Dokumentation: README, KONZEPT, ROADMAP, SAVEPOINT
This commit is contained in:
+2
-3
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user