This commit is contained in:
Marek
2026-04-04 21:56:31 +02:00
parent 3b95fa34a3
commit 05fbcd5a04
7 changed files with 121 additions and 19 deletions

46
CLAUDE.md Normal file
View File

@@ -0,0 +1,46 @@
# YouTube App
Selbst-gehostete Anwendung: YouTube-Videos per Browser Extension erfassen, auf einem Server speichern und per Kotlin-App auf Android/Android TV streamen und herunterladen.
## Dokumentation
- `systems.md` — Technologie-Stack pro Komponente
- `commication.md` — Kommunikationsflüsse zwischen den Systemen
- `features.md` — Konkrete Features und Benutzerinteraktionen
- `architecture.md` — Detaillierter Systemaufbau (Endpoints, Services, Models, Screens)
- `szenarios.md` — Benutzer-Szenarien
## Architektur
Drei Komponenten:
### Browser Extension (JavaScript, Manifest V3)
- Content Script liest YouTube-DOM aus, extrahiert Videodaten
- Background Script sendet Daten an Server (POST /videos)
### Server (Python, FastAPI, SQLite, yt-dlp + ffmpeg)
- REST API empfängt Videodaten, liefert Videolisten, triggert Downloads, streamt Videos
- yt-dlp lädt Videos von YouTube, speichert auf dem Server
- Beim Streamen wird das Video automatisch heruntergeladen, falls noch nicht geschehen
### App (Kotlin, Android/Android TV)
- Screens: AllVideos, Downloaded, VideoDetail, VideoPlayer
- Videos werden vom Server gestreamt, optional auf das Gerät heruntergeladen
- Lokale Videos werden bevorzugt abgespielt, sonst Stream
## API Endpoints
- `POST /videos` — Videodaten von Extension empfangen
- `GET /videos` — alle Videos abrufen
- `GET /videos/downloaded` — heruntergeladene Videos abrufen
- `POST /videos/{id}/download` — Download auf Server triggern
- `GET /videos/{id}/stream` — Video streamen
- `GET /videos/{id}/file` — Video-Datei zum Download auf Client ausliefern
## Entscheidungen
- Kein Jellyfin — erfüllt nicht die Anforderung, Videos vor dem Download aufzulisten
- Kein PostgreSQL/MySQL — SQLite reicht für den Prototyp
- Keine Benutzerprofile im Prototyp
- Videos werden auf dem Server gespeichert, Client speichert nur bei explizitem Download
- Sprache der Dokumentation: Deutsch

28
architecture.md Normal file
View File

@@ -0,0 +1,28 @@
# Browser Extension
- Content Script — YouTube-DOM auslesen, Videodaten extrahieren
- Background Script — Daten an Server senden (POST /videos)
# Server
## API
- POST /videos — Videodaten von Extension empfangen
- GET /videos — alle Videos abrufen
- GET /videos/downloaded — heruntergeladene Videos abrufen
- POST /videos/{id}/download — Download triggern
- GET /videos/{id}/stream — Video streamen
- GET /videos/{id}/file — Video-Datei zum Download ausliefern
## Services
- VideoService — Videos speichern, abrufen, Status verwalten
- DownloadService — yt-dlp aufrufen, Download-Status tracken
## Model
- Video — id, title, youtuber, thumbnail_url, youtube_url, file_path
# App
## Screens
- AllVideosScreen — alle Videos als Cards
- DownloadedVideosScreen — heruntergeladene Videos als Cards
- VideoDetailScreen — Starten, Download, Zurück
- VideoPlayerScreen — Player mit Standard-Controls
## ViewModel
- VideoViewModel — Video-State verwalten, API-Aufrufe triggern, lokal bevorzugen sonst streamen
## API
- ServerApi — kommuniziert mit FastAPI (GET /videos, POST /download, GET /stream, GET /videos/{id}/file)
## Model
- Video — id, title, youtuber, thumbnailUrl, youtubeUrl, isDownloaded, localFilePath

17
commication.md Normal file
View File

@@ -0,0 +1,17 @@
# Browser Extension intern
- Videodaten erfassen
# Browser Extension -> Server
- Videodaten senden
# Server intern
- Videodaten persistieren
- Video herunterladen
# Server -> App
- Video streamen
- Videodatei senden
# App -> Server
- Videos abrufen
- Video download anfragen
- Video stream anfragen
# App intern
- Video streamen anfragen
- Video downloaden anfragen

13
features.md Normal file
View File

@@ -0,0 +1,13 @@
# Aufgaben
## Browser
- Youtube Videos werden erfasst
- Videodaten (Titel, Youtuber, Bild, Url) werden nach dem erfassen an den Server gesendet
- Extension hat keine Einstellung
## App
- Ansicht: Navigation mit Alle Videos, Heruntergeladen
- Alle Videos: Videos als Cards auflisten (Untereinander: Bild, Youtuber, Titel)
- Heruntergeladen: Heruntergeladene Videos als Cards auflisten (Untereinander: Bild, Youtuber, Titel)
- Klick auf Card zeigt die Videoübersicht (Starten, Download, Zurück)
- Klick auf Startet startet dem Stream mit den Standard Video-Controls
- Klick auf Download lädt das Video herunter und übertragt es auf den Client
- Beim streamen wird das Video heruntergeladen, wenn noch nicht geschehen

19
plan.md
View File

@@ -1,19 +0,0 @@
Browser Extension:
Profilauswahl pro User
Erkennt YouTube-Suchergebnisse im DOM
Extrahiert Video-ID, Titel, Thumbnail
Sendet Daten mit Profil-Zuordnung an lokalen Server
Server (Ubuntu Desktop lokal):
Empfängt Video-Daten, ordnet sie dem Profil zu
Download via yt-dlp + sofortiges Streaming
Jellyfin als Media Server mit Benutzerprofilen
Clients:
Smart TV / Fire Stick via Jellyfin App (jeder loggt sich in sein Profil ein)
Android App optional als mobiler Player
Prototyp: Hetzner CAX11, später lokal.

9
systems.md Normal file
View File

@@ -0,0 +1,9 @@
# Browser Extension
- Javascript: Daten angezeigter Videos an Server senden
# Server
- FastAPI: Videodaten empfangen
- python: Downlods triggern, Videos streamen
- yt-dlp + ffmpeg: Video herunterladen
- SQLite: Daten persistieren
# App
- Kotlin: Videos auflisten, Download triggern, Videos abspielen

8
szenarios.md Normal file
View File

@@ -0,0 +1,8 @@
# Szenario 1
- Benutzer geht auf die Youtube Startseite -> Alle auf der Seite sichtbaren Youtube Videos werden erfasst
- Benutzer öffnet die App -> Alle eben sichtbaren Videos werden angezeigt
- Benutzer klickt auf ein Video -> In der Übersicht auf Starten -> Das Video wird abgespielt
# Szenario 2
- Benutzer öffnet die App -> Klickt auf ein Video -> In der Übersicht auf Download
- Das Internet fällt aus -> Benutzer öffnet die App -> Geht auf heruntergeladene Videos
- Das vorhin heruntergeladene Video wird angezeigt -> Übersicht Abspielen -> Video wird abgespielt