"intro":"In der Datenbank gespeicherte Betriebseinstellungen — sie überschreiben die Datei-/Env-Standardwerte und wirken ohne erneutes Deployment. Lass ein Feld leer (oder setze es zurück), um auf den Standard zurückzufallen.",
"hint":"z. B. Siftlode <addr@gmail.com>. Standard ist der Benutzername."
},
"smtp_password":{
"label":"SMTP-Passwort",
"hint":"App-Passwort. Verschlüsselt gespeichert; nur schreibbar — wird nie wieder angezeigt."
},
"quota_daily_budget":{
"label":"Tägliches Kontingentbudget",
"hint":"YouTube-Data-API-Einheiten pro Tag (kostenloses Limit 10.000). Standard 9000 lässt Puffer."
},
"backfill_quota_reserve":{
"label":"Nachlade-Kontingentreserve",
"hint":"Reservierte Einheiten, damit geplantes Nachladen interaktive Syncs / Anreicherung nie aushungert."
},
"search_daily_limit_per_user":{
"label":"Live-Suche — Tageslimit pro Nutzer",
"hint":"Maximale Live-YouTube-Suchen pro Nutzer und Tag. Bei der API-Quelle kostet jede Suche 100 Einheiten (das gemeinsame Budget reicht also für insgesamt nur ~80-90/Tag); bei der Scrape-Quelle ist es ein reines Missbrauchslimit. 0 = Live-Suche deaktiviert."
},
"search_source":{
"label":"Quelle der Live-Suche",
"hint":"Woher die Ergebnisse der Live-YouTube-Suche stammen. \"scrape\" nutzt YouTubes internen Endpunkt und verbraucht kein API-Kontingent (empfohlen). \"api\" nutzt das offizielle search.list (100 Einheiten/Seite). Auf \"api\" umstellen, falls das Scraping ausfällt oder blockiert wird."
},
"backfill_recent_max_videos":{
"label":"Aktuelles Nachladen — max. Videos",
"hint":"Neueste Videos pro Kanal beim ersten Durchlauf."
},
"backfill_recent_max_days":{
"label":"Aktuelles Nachladen — max. Alter (Tage)",
"hint":"Wie weit der erste Durchlauf pro Kanal zurückreicht."
},
"shorts_probe_max_seconds":{
"label":"Shorts-Prüfung — max. Dauer (s)",
"hint":"Nur Videos bis zu dieser Länge werden als mögliche Shorts geprüft."
},
"shorts_probe_batch":{
"label":"Shorts-Prüfung — Stapelgröße",
"hint":"Wie viele Videos pro Lauf klassifiziert werden."
},
"enrich_batch_size":{
"label":"Anreicherungs-Stapelgröße",
"hint":"videos.list-IDs pro Aufruf (YouTube begrenzt auf 50)."
},
"autotag_title_sample":{
"label":"Auto-Tag-Titelstichprobe",
"hint":"Pro Kanal abgetastete aktuelle Videotitel zur Spracherkennung."
},
"youtube_api_key":{
"label":"YouTube-API-Schlüssel",
"hint":"Optional. Für öffentliche Lesezugriffe (Kanäle/Videos), damit gemeinsames Nachladen nicht vom OAuth eines Nutzers abhängt. Verschlüsselt gespeichert; nur schreibbar."
},
"youtube_api_proxy":{
"label":"YouTube-API-Egress-Proxy",
"hint":"Optional. HTTP(S)-Proxy-URL für ausgehende YouTube-API-Aufrufe — über einen Host mit fester IP leiten, damit ein IP-beschränkter Schlüssel von einem Server mit dynamischer IP funktioniert. Leer = direkt."
},
"google_client_id":{
"label":"Google-Client-ID",
"hint":"OAuth-2.0-Client-ID für die Google-Anmeldung. Verschlüsselt gespeichert; nur schreibbar. Beide Google-Felder leer lassen, um die Google-Anmeldung zu deaktivieren (E-Mail+Passwort funktioniert weiter)."
},
"google_client_secret":{
"label":"Google-Client-Secret",
"hint":"OAuth-2.0-Client-Secret. Verschlüsselt gespeichert; nur schreibbar."
},
"allow_registration":{
"label":"Registrierung erlauben",
"hint":"Wenn aktiviert, kann jeder eine E-Mail+Passwort-Registrierung einreichen. Für die Anmeldung sind weiterhin E-Mail-Bestätigung und Admin-Freigabe nötig."
},
"explore_grace_days":{
"label":"Erkunden — Karenzzeit (Tage)",
"hint":"Wie lange ein erkundeter, nicht abonnierter Kanal (und seine flüchtigen Videos) behalten wird, bevor die Aufräumaufgabe ihn entfernt. Ein Abo behält ihn dauerhaft."
"hint":"Wie lange ein nicht behaltenes Live-Suchergebnis-Video (niemand hat es angesehen/gespeichert/abonniert) behalten wird, bevor die Entdeckungs-Aufräumaufgabe es entfernt."
"hint":"Maximale Gesamtgröße über die Downloads aller Nutzer. 0 = unbegrenzt (die Festplatte ist die Grenze); bei Überschreitung entfernt die GC die am längsten ungenutzten Dateien."
},
"download_default_max_bytes":{
"label":"Standard-Kontingent pro Nutzer (Bytes)",
"hint":"Wie viel Speicher ein Nutzer belegen darf, bevor neue Downloads blockiert werden. Eine Überschreibung pro Nutzer hat Vorrang. Standard 5 GiB."
},
"download_default_max_concurrent":{
"label":"Gleichzeitige Downloads / Nutzer",
"hint":"Wie viele Downloads ein Nutzer gleichzeitig ausführen darf."
},
"download_default_max_jobs":{
"label":"Job-Limit / Nutzer",
"hint":"Maximale Anzahl an Downloads, die ein Nutzer in seiner Bibliothek behalten darf."
},
"download_retention_days":{
"label":"Aufbewahrung (Tage)",
"hint":"Ein Download läuft so viele Tage nach dem letzten Zugriff ab; die Aufräumaufgabe entfernt ihn dann (sobald nichts mehr darauf verweist) nach der Karenzzeit."
},
"download_gc_grace_days":{
"label":"Aufräum-Karenzzeit (Tage)",
"hint":"Zusätzliche Tage, die ein abgelaufener Download vor dem Löschen behalten wird."
},
"download_layout":{
"label":"Ablage-Layout",
"hint":"„plex“ = ein Kanal/Staffel JJJJ/…-Baum mit .nfo + Poster (in Plex indexierbar); „flat“ = ein einzelner Ordner."
},
"download_worker_concurrency":{
"label":"Worker-Parallelität",
"hint":"Wie viele Downloads der Worker parallel verarbeitet."
},
"sponsorblock_default":{
"label":"SponsorBlock standardmäßig",
"hint":"SponsorBlock (Sponsor-Segmente überspringen) für neu erstellte benutzerdefinierte Download-Profile aktivieren."
"hint":"Zeigt die Plex-Bibliothek als Feed-Quelle mit einem umfangreichen Player. Erfordert, dass der Plex-Server von diesem Host erreichbar ist und die Medien auf einem lokalen Mount liegen (siehe Pfad-Zuordnung)."
},
"plex_server_url":{
"label":"Plex-Server-URL",
"hint":"Von diesem Host erreichbare Basis-URL, z. B. http://192.168.1.112:32400."
},
"plex_server_token":{
"label":"Plex-Server-Token",
"hint":"Der Admin-X-Plex-Token des Servers. Nur serverseitig genutzt (Metadaten + Bilder); wird nie an den Browser gesendet. Verschlüsselt gespeichert; nur schreibbar."
},
"plex_path_map":{
"label":"Medien-Pfad-Zuordnung",
"hint":"Ordnet die Plex-Dateipfade dem lokalen Mount dieses Hosts zu, damit Siftlode die physische Datei abspielen kann. Durch Zeilenumbruch/Komma getrennte plexPrefix=localPrefix-Paare, z. B. /data=/plex-media. Leer = auf beiden Seiten identisch."
},
"plex_libraries":{
"label":"Angezeigte Bibliotheken",
"hint":"Durch Kommas getrennte Plex-Sektionsschlüssel. Leer = alle Sektionen. Nutze nach dem Verbindungstest die Bibliotheksauswahl unten."
},
"plex_sync_interval_min":{
"label":"Sync-Intervall (Minuten)",
"hint":"Wie oft die Katalog-Sync-Aufgabe die Plex-Metadaten spiegelt."
},
"plex_max_transcodes":{
"label":"Max. gleichzeitige Transcodes",
"hint":"Obergrenze für gleichzeitige CPU-Transcodes inkompatibler Dateien (späterer Fallback). Direkt abspielbare Dateien sind nicht begrenzt."