Skip to content

Datenmodelle DE

TheMRX13 edited this page Jul 5, 2026 · 5 revisions

Datenmodelle

🌐 English · Deutsch

Quellen-Registry (providers.py)

Jede Streaming-Quelle ist als Provider-Dataclass registriert: URL-Patterns (Serie/Staffel/Episode) plus die zugehörigen Modellklassen.

Quelle series_cls season_cls episode_cls
AniWorld AniworldSeries AniworldSeason AniworldEpisode
SerienStream (s.to) SerienstreamSeries SerienstreamSeason SerienstreamEpisode
FilmPalast FilmPalastEpisode (Filme haben keine Staffel-Struktur)
MegaKino (Serie) MegakinoSeries MegakinoSeason MegakinoEpisode (ein Post = eine Staffel; synthetische …?episode=N-URLs)
MegaKino (Film) MegakinoMovie

resolve_provider(url) normalisiert die URL (z. B. /serie/stream/<slug>/serie/<slug>, Trailing-Slash) und liefert den passenden Provider — oder wirft ValueError("Unsupported URL").

from mediaforge.providers import resolve_provider

prov = resolve_provider("https://aniworld.to/anime/stream/one-piece")
series = prov.series_cls(url="https://aniworld.to/anime/stream/one-piece")

Series

Lazy-ladende Properties (HTML wird erst beim ersten Zugriff geholt und gecacht):

title, title_cleaned, description, genres, release_year, poster_url, directors, actors, producer, country, age_rating, rating, imdb (IMDB-ID), mal_id (nur AniWorld), has_movies, seasons, season_count.

Hinweis Poster-URLs: Manche s.to-Serien verwenden im Poster-Pfad eine Hash-ID statt des Serien-Slugs — die Extraktion ist entsprechend generalisiert.

Season

AniworldSeason(url, series=None) — Properties u. a. season_number, episodes, are_movies (AniWorld-„Filme“-Staffel, wird z. B. von AutoSync übersprungen).

Episode

Kernklasse für Downloads:

ep = prov.episode_cls(
    url="https://aniworld.to/anime/stream/x/staffel-1/episode-1",
    selected_language="German Dub",
    selected_provider="VOE",
    selected_path="/pfad/optional",   # optional
)
ep.download(cancel_event=event)        # blockiert; bricht bei gesetztem Event ab
  • provider_data (Property): Mapping (Audio, Subtitles) → {Hoster → Embed-URL} — Grundlage für Sprachprüfungen (z. B. in AutoSync) und die Hoster-Auswahl.
  • download(): Extraktor aufrufen → Direktlink → yt-dlp/FFmpeg → Zieldatei gemäß MEDIAFORGE_NAMING_TEMPLATE; setzt Sprach-Tags (deu/eng/jpn) auf Audio-/Subtitle-Spuren. Der Pfad der fertigen Datei liegt danach in _episode_path.
  • Fortschritt wird global über models/common/common.get_ffmpeg_progress() veröffentlicht (Phase download = yt-dlp, ffmpeg = Muxing) — die Queue-UI und /api/v1/status lesen daraus.

Sprachsystem (config.py)

Site-Sprach-Keys werden auf semantische Enums gemappt:

Key Label (aniworld) Audio Untertitel
1 German Dub GERMAN
2 English Sub JAPANESE ENGLISH
3 German Sub JAPANESE GERMAN
4 English Dub ENGLISH

s.to nutzt dieselben Keys mit eigenen Labels (1 = German Dub, 2 = English Dub, 3 = English Dub mit German Sub). Hilfs-Maps: LANG_KEY_MAP, LANG_LABELS, LANG_CODE_MAP (ISO-639-2 für FFmpeg-Tags) und die Inversen.

URL-Patterns

In config.py als kompilierte Regexe definiert (MEDIAFORGE_SERIES_PATTERN, …_SEASON_…, …_EPISODE_…, analog SERIENSTREAM_*, plus FILMPALAST_EPISODE_PATTERN in providers.py). AniWorld-Episode-URLs decken auch Filme ab (/filme/film-N).

Clone this wiki locally