Generiert statische HTML-Bibliotheken aus Videodateien – archivierungsfähig, ohne Server, ohne Datenbank.
Project description
Mediathek Manager
Generiert statische HTML-Bibliotheken aus Videodateien — archivierungsfähig, ohne Server, ohne Datenbank.
Das Tool scannt Verzeichnisse mit Videodateien (M4V, MP4, MKV, MOV), extrahiert eingebettete Metadaten (Titel, Tags, Genre, Kapitel, Beschreibungen) und generiert eine navigierbare HTML-Bibliothek direkt neben den Videos. Eine einzige Bibliothek pro Aufruf — rekursiv über alle Unterverzeichnisse mit hierarchie-gespiegelter Struktur, Breadcrumb-Navigation, Tag- und Genre-Filtern sowie Detailseiten inkl. klickbaren Kapiteln.
Scope — was der Mediathek Manager nicht tut
Der Mediathek Manager erzeugt keine Vorschaubilder. Poster-Extraktion ist
eine eigenständige Kompetenz und gehört in spezialisierte Tools (z. B. den
kurmann-vorschaubild-manager, aufgerufen aus dem kurmann-mediaset-creator).
Der Mediathek Manager konsumiert nur existierende Sidecars nach folgender
Konvention:
- Existiert neben einem Video eine Datei
{stem}-poster.jpg(z. B.Urlaub-poster.jpgnebenUrlaub.m4v), wird sie als Poster referenziert. - Fehlt das Sidecar, rendert der Generator eine Platzhalter-Card mit zentriertem Titel. Sie ist weiterhin voll klickbar und führt zur Detailseite.
Dadurch bleibt der Mediathek Manager fokussiert auf Scannen, Metadaten, HTML und nimmt keine ffmpeg-Abhängigkeit für Bildverarbeitung auf.
Voraussetzungen
- Python >= 3.11
- ffprobe (für Metadaten-Extraktion aus eingebetteten Tags und Kapiteln)
- rclone (optional, für den Zugriff auf Remote-Speicher wie Synology via SFTP)
Hinweis zu rclone + ffprobe: Da ffprobe in einer Pipe nicht seeken kann, muss bei MP4-/M4V-Dateien mit moov-Atom am Ende die gesamte Datei gestreamt werden. Bei großen Videos auf langsamen Verbindungen läuft das in den Timeout. Für verlässliche Workflows empfiehlt sich stattdessen ein lokal gemountetes Volume (SMB oder
rclone mount) und die lokale Pfadangabe.
Installation
# Via PyPI
pip install kurmann-mediathek-manager
# Lokale Entwicklung
uv sync
Verwendung
# Bibliothek lokal generieren
mediathek-manager generate /pfad/zum/videoverzeichnis
# Mit eigenem Titel (sonst wird der Ordnername verwendet)
mediathek-manager generate /pfad/zum/Familienfilme --title "Familienfilme"
# Über rclone-Remote (z. B. Synology via SFTP)
mediathek-manager generate lyssach-nas:/Familienfilme --title "Familienfilme"
# Ohne Rekursion: nur Videos im Root-Verzeichnis
mediathek-manager generate /pfad/zum/videoverzeichnis --no-recursive
# Mit ausführlicher Ausgabe
mediathek-manager generate /pfad/zum/videoverzeichnis --verbose
# Nur scannen (zeigt gefundene Videos und Metadaten)
mediathek-manager scan /pfad/zum/videoverzeichnis
# Konfiguration
mediathek-manager config list
mediathek-manager config set tools.ffprobe_path /usr/local/bin/ffprobe
Erzeugte Struktur
videoverzeichnis/ ← CLI-Input (Root der Bibliothek)
├── index.html ← Einstiegspunkt (einzige HTML im Root)
├── Film1.m4v
├── Film1-poster.jpg ← optionales Sidecar (nicht vom Tool erzeugt)
├── Ferien/
│ ├── Urlaub.m4v
│ └── Urlaub-poster.jpg
└── mediathek/ ← alle weiteren Artefakte
├── style.css
├── browse/ ← Unterverzeichnis-Indexe (Hierarchie gespiegelt)
│ └── Ferien/
│ └── index.html
├── detail/ ← Detailseiten (Hierarchie gespiegelt)
│ ├── Film1.html
│ └── Ferien/
│ └── Urlaub.html
├── tag/ ← Tag-Filterseiten (über gesamte Bibliothek)
│ └── weltraum.html
└── genre/ ← Genre-Filterseiten
└── dokumentation.html
Poster werden nicht unter mediathek/poster/ abgelegt, sondern direkt vom
Sidecar neben dem Video referenziert. Existiert kein Sidecar, zeigt die Card
einen Platzhalter mit zentriertem Titel.
Safari-optimiert: Die Detailseiten nutzen native <video>-Tags, die in Safari
via AVFoundation rendern — dieselbe Pipeline wie QuickTime. HDR10 / Dolby Vision /
Rec.2020 PQ wird korrekt tone-mapped. Safari ist daher der empfohlene Browser.
Suche: Die Bibliothek nutzt keine JavaScript-Suche — die Browser-interne Textsuche (⌘+F bzw. Strg+F) funktioniert bestens auf der langen Videoliste.
Konfiguration
Persistente Konfiguration unter ~/.config/mediathek-manager/config.toml:
[tools]
ffprobe_path = "ffprobe"
rclone_path = "rclone"
Upgrade von 0.1.x auf 0.2.0
Version 0.2.0 ändert die Ausgabestruktur grundlegend. Alte .mediathek/-Ordner
sind nicht kompatibel und sollten vor der erneuten Generierung gelöscht werden:
rm -rf /pfad/zum/videoverzeichnis/.mediathek
mediathek-manager generate /pfad/zum/videoverzeichnis --title "Deine Bibliothek"
Änderungsverlauf
Siehe CHANGELOG.md.
Lizenz
MIT — siehe LICENSE.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kurmann_mediathek_manager-0.2.0.tar.gz.
File metadata
- Download URL: kurmann_mediathek_manager-0.2.0.tar.gz
- Upload date:
- Size: 19.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7170b7d7a78c4ed86a9bf9c56ebea1bb23d5bb513a763637580b0e797490d6f3
|
|
| MD5 |
bce171968c2ccde47319f8bd57fe0c05
|
|
| BLAKE2b-256 |
7f243bd9b6a53b08b1500299fb40fd2ae0f1c89a18ae9d6a98a536cd2fe7051f
|
Provenance
The following attestation bundles were made for kurmann_mediathek_manager-0.2.0.tar.gz:
Publisher:
publish.yml on kurmann/mediathek-manager
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kurmann_mediathek_manager-0.2.0.tar.gz -
Subject digest:
7170b7d7a78c4ed86a9bf9c56ebea1bb23d5bb513a763637580b0e797490d6f3 - Sigstore transparency entry: 1271633797
- Sigstore integration time:
-
Permalink:
kurmann/mediathek-manager@8e25773c6dae348e62c915c88ed1a3776ff29b2a -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kurmann
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8e25773c6dae348e62c915c88ed1a3776ff29b2a -
Trigger Event:
release
-
Statement type:
File details
Details for the file kurmann_mediathek_manager-0.2.0-py3-none-any.whl.
File metadata
- Download URL: kurmann_mediathek_manager-0.2.0-py3-none-any.whl
- Upload date:
- Size: 24.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f81359b1af3f3e6b55a7714aad8f81d48a2e3402500de183de5c71ac1394ba8
|
|
| MD5 |
926f36d7c85ec815608b5cbe4ee07b6a
|
|
| BLAKE2b-256 |
8e592d939c9163b2b34b67c883009bb9131f0b90377798b4c92934050da7f8c4
|
Provenance
The following attestation bundles were made for kurmann_mediathek_manager-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on kurmann/mediathek-manager
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kurmann_mediathek_manager-0.2.0-py3-none-any.whl -
Subject digest:
1f81359b1af3f3e6b55a7714aad8f81d48a2e3402500de183de5c71ac1394ba8 - Sigstore transparency entry: 1271633827
- Sigstore integration time:
-
Permalink:
kurmann/mediathek-manager@8e25773c6dae348e62c915c88ed1a3776ff29b2a -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kurmann
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8e25773c6dae348e62c915c88ed1a3776ff29b2a -
Trigger Event:
release
-
Statement type: