Kino-Projekt

Interne WebUI zum Prüfen und Importieren von Inhalten aus legalen Quellen in Jellyfin.

Sicherheitsgrenzen

Dieses Projekt implementiert bewusst keine Scraper für Piracy-Seiten, keine DRM-/Paywall-/Login-Umgehung und keinen Cookie-Import. Unterstützt werden YouTube-Metadaten via yt-dlp, öffentliche Internet-Archive-Items sowie konservativ geprüfte öffentliche Medien-/Mediathek-URLs.

Entwicklung

cd backend
python -m venv .venv
. .venv/bin/activate
pip install -e '.[test]'
pytest -q
uvicorn app.main:app --host 0.0.0.0 --port 8080

Healthcheck: curl http://localhost:8080/health

API-MVP

  • POST /api/probe prüft eine URL und liefert Metadaten, ohne einen Download zu starten.
  • POST /api/imports legt Source + Import-Job in SQLite an und startet den Import im Hintergrund.
  • GET /api/imports und GET /api/imports/{id} zeigen Status/Fortschritt/Fehler an.
  • GET /api/sources listet bekannte Quellen.

Zielprofile

Die WebUI bietet drei Jellyfin-Zielprofile an:

  • film/jellyfin/Filme/<Titel> (<Jahr>)/
  • serie/jellyfin/Serien/<Serientitel>/Staffel<N>/<SxxExx - Episodentitel>/
  • clip/jellyfin/YouTube-Mediathek/<Kanal oder Quelle>/<Titel> [<id>]/

Optionale Titel-/Jahr-/Serienfelder dienen nur zur Zielpfad-Korrektur; Pfade werden serverseitig normalisiert und bleiben unter KINOPROJEKT_MEDIA_ROOT.

App-Login

Wenn KINOPROJEKT_ADMIN_PASSWORD_HASH und KINOPROJEKT_SESSION_SECRET gesetzt sind, schützt ein lokaler App-Login die API. Das Passwort wird nur als Argon2-Hash gespeichert; die Session liegt in einem HttpOnly, Secure, SameSite=Lax Cookie.

Hash/Secret für die geschützte Zielhost-.env erzeugen:

cd backend
python -c "from app.services.auth import hash_password; import getpass; print(hash_password(getpass.getpass()))"
python -c "import secrets; print(secrets.token_urlsafe(48))"

Jellyfin wird nur aktualisiert, wenn JELLYFIN_API_KEY in einer geschützten Zielhost-Umgebung gesetzt ist; Secrets gehören nicht in Nextcloud.

Description
No description provided
Readme 3.1 MiB
Languages
Python 95.1%
JavaScript 3.1%
TypeScript 0.6%
HTML 0.6%
CSS 0.4%
Other 0.2%