Skip to main content

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.jpg neben Urlaub.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

kurmann_mediathek_manager-0.2.0.tar.gz (19.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kurmann_mediathek_manager-0.2.0-py3-none-any.whl (24.7 kB view details)

Uploaded Python 3

File details

Details for the file kurmann_mediathek_manager-0.2.0.tar.gz.

File metadata

File hashes

Hashes for kurmann_mediathek_manager-0.2.0.tar.gz
Algorithm Hash digest
SHA256 7170b7d7a78c4ed86a9bf9c56ebea1bb23d5bb513a763637580b0e797490d6f3
MD5 bce171968c2ccde47319f8bd57fe0c05
BLAKE2b-256 7f243bd9b6a53b08b1500299fb40fd2ae0f1c89a18ae9d6a98a536cd2fe7051f

See more details on using hashes here.

Provenance

The following attestation bundles were made for kurmann_mediathek_manager-0.2.0.tar.gz:

Publisher: publish.yml on kurmann/mediathek-manager

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kurmann_mediathek_manager-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for kurmann_mediathek_manager-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1f81359b1af3f3e6b55a7714aad8f81d48a2e3402500de183de5c71ac1394ba8
MD5 926f36d7c85ec815608b5cbe4ee07b6a
BLAKE2b-256 8e592d939c9163b2b34b67c883009bb9131f0b90377798b4c92934050da7f8c4

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page