API / Poradniki
Automatyzacja z Jellyfinem
Skrypt dociąga polskie napisy do odcinków w Twojej bibliotece, a potem prosi Jellyfina o odświeżenie, żeby od razu je zobaczył.
- 10 minut
- Python 3
- klucz API
- Jellyfin
fansuby_sub.py z poradnika Napisy do jednego pliku wideo. Trzymaj oba pliki w jednym katalogu.Jak to się łączy
Jellyfin rozpoznaje zewnętrzne napisy po nazwie: plik Odcinek.pl.srt obok Odcinek.mkv pojawia się w odtwarzaczu jako polskie napisy. Nasz skrypt zapisuje je właśnie tak. Jellyfin musi tylko przeskanować bibliotekę, i to załatwia jedno wywołanie jego API na końcu.
Czego potrzebujesz
- Pythona 3.9+ z biblioteką
requestsna maszynie, która widzi katalog z anime. - Klucza API fansuby.
- Klucza API Jellyfina: panel administracyjny, Zaawansowane, Klucze API, nowy klucz. Nazwij go np. „fansuby”.
- Odcinków z nazwami w postaci
Tytuł - 05.mkv.
Zrób to
Krok 1: Ustaw klucze i adres Jellyfina
Terminal export FANSUBY_KEY="fsb_…" export JELLYFIN_URL="http://localhost:8096" export JELLYFIN_KEY="…"Klucz utworzysz w ustawieniach konta. W PowerShellu wpisz
$env:FANSUBY_KEY="fsb_…".Krok 2: Zapisz skrypt
Wklej kod do pliku
fansuby_jellyfin.py.fansuby_jellyfin.py #!/usr/bin/env python3 """Uzupełnia polskie napisy w katalogu z anime i odświeża bibliotekę Jellyfina.""" import os import sys import time from pathlib import Path import requests from fansuby_sub import fetch_for JELLYFIN = os.environ["JELLYFIN_URL"].rstrip("/") # np. http://localhost:8096 VIDEO = {".mkv", ".mp4", ".avi"} downloaded = 0 for video in sorted(Path(sys.argv[1]).rglob("*")): if video.suffix.lower() not in VIDEO: continue result = fetch_for(video) if result.startswith("pobrano"): downloaded += 1 print(f"{video.name}: {result}") time.sleep(2.5) # pobieranie ma limit 30 plików na minutę if downloaded: refresh = requests.post( f"{JELLYFIN}/Library/Refresh", headers={"X-Emby-Token": os.environ["JELLYFIN_KEY"]}, timeout=15, ) refresh.raise_for_status() print(f"Odświeżono Jellyfina (nowych napisów: {downloaded})") else: print("Nic nowego")Krok 3: Uruchom go na katalogu biblioteki
Podaj ten sam katalog, który Jellyfin ma w bibliotece, tak jak widzi go maszyna ze skryptem. Jeśli Jellyfin działa w Dockerze, chodzi o ścieżkę na hoście, nie wewnątrz kontenera.
Terminal python3 fansuby_jellyfin.py /media/animeWynik [Erai-raws] Sousou no Frieren - 01 [720p].mkv: pobrano (Erai-raws, srt) [SubsPlease] Jujutsu Kaisen - 01 (1080p) [AB12CD34].mkv: pobrano (SubsPlease, srt) Odświeżono Jellyfina (nowych napisów: 2)Przy następnym uruchomieniu skrypt pominie odcinki, które mają już napisy, i nie będzie niepotrzebnie odświeżał Jellyfina.
Krok 4: Puszczaj go regularnie
Raz dziennie wystarczy. Na Linuksie wpis w crontabie:
crontab -e 0 4 * * * FANSUBY_KEY=fsb_… JELLYFIN_URL=http://localhost:8096 JELLYFIN_KEY=… python3 /opt/fansuby/fansuby_jellyfin.py /media/anime >> /var/log/fansuby.log 2>&1
Warto wiedzieć
fansuby_sub.py parametr "format": "srt". Szczegóły w poradniku Jak wybrać napisy.