Der Eindeutigkeitsindex aus Punkt 3 stellte die Regel auf, dichtete aber den einen Weg nicht ab, auf dem sie verletzt wird: der Enricher setzt die TMDB-Kennung, und sobald zwei Einträge derselben Mediathek dieselbe bekamen, brach EF die gesamte Speicherung ab — mit "An error occurred while saving the entity changes", einer Meldung, die den Grund nicht nennt und den ganzen Scan mitnimmt. Jetzt wird die Kennung nicht blind gesetzt, sondern vorgemerkt und nach der Schleife zusammengelegt. Zwei Tests halten den Fall fest: der Anbieter antwortet auf jede Anfrage mit demselben Film beziehungsweise derselben Serie, also genau die Lage, die vorher den Lauf zerriss. Dazu der wahrscheinliche Grund für die siebenhundert Serien: der Serientitel kam ausschliesslich aus dem Dateinamen. Heisst eine Datei nur "S01E01.mkv", steht vor der Folgennummer nichts, und der ganze Dateiname wurde zum Serientitel — zwanzig Folgen ergaben zwanzig Serien namens "S01E01", "S01E02", und so weiter. Jetzt sagt der Ordner den Namen, wenn die Datei ihn nicht nennt; der Staffelordner wird dabei übersprungen, sonst hiesse die Serie "Staffel 1". Plex und Jellyfin lesen ihn seit je so. Dazu die Prüfliste: Folgen werden nach Serie gebündelt, weil zwanzig neue Folgen eine Entscheidung sind und nicht zwanzig. Mit Mehrfachauswahl — anhaken und gemeinsam freigeben oder auf einen Zeitpunkt legen. Und der Zeitpunkt ist ein datetime-local statt eines Textfelds mit Formvorschrift, bei dem jeder Tippfehler erst nach dem Absenden auffiel. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
74 lines
3.1 KiB
YAML
74 lines
3.1 KiB
YAML
# Beispiel, kein fertiger Betrieb. Jeder Pfad hier gehört angepasst.
|
|
#
|
|
# Übernommen aus einem laufenden Plex-Container auf einem UGREEN-NAS — die
|
|
# Form ist bewährt, die Werte sind es nur dort.
|
|
|
|
services:
|
|
flaro:
|
|
# Die Registry des eigenen Gitea. Wer woanders veröffentlicht, trägt
|
|
# hier etwas anderes ein — siehe docs/NAS-EINRICHTEN.md.
|
|
image: git.scarriffle.com/scarriffle/flaro:latest
|
|
container_name: flaro
|
|
restart: unless-stopped
|
|
|
|
ports:
|
|
- "8080:8080"
|
|
|
|
environment:
|
|
- TZ=Europe/Zurich
|
|
|
|
# Plakate, Hintergründe und NFO-Dateien neben den Film legen.
|
|
#
|
|
# **Standardmässig aus.** Dafür muss die Medieneinhängung unten ohne
|
|
# `:ro` stehen — und damit kann der Server dort im Grundsatz schreiben.
|
|
# Dass er nur Beiwerk anlegt, hängt an einer Erlaubnisliste im Code
|
|
# (`SidecarNames`): poster.jpg, fanart.jpg, logo.png, movie.nfo,
|
|
# tvshow.nfo, je Folge eine NFO und ein Standbild. Alles andere lehnt er
|
|
# ab, auch Mediendateien — die werden nie geändert, umbenannt oder
|
|
# gelöscht.
|
|
#
|
|
# Der Gewinn: dein Bestand wird tragbar. Ein Umzug, ein Neuaufbau der
|
|
# Datenbank oder ein zweiter Server finden Zuordnungen und Bilder wieder.
|
|
- FLARO_WRITE_SIDECARS=true
|
|
|
|
# Wem die Dateien auf dem Wirt gehören. 1000:1000 ist die Voreinstellung
|
|
# im Image; wer andere Kennungen hat, trägt sie hier ein — `id -u` und
|
|
# `id -g` auf dem Wirt sagen, welche.
|
|
user: "1000:1000"
|
|
|
|
volumes:
|
|
# Datenbank und Einstellungen. **Das Einzige, was gesichert werden muss.**
|
|
- /volume4/CRITICAL/Docker/Flaro/config:/config
|
|
|
|
# Bilder und Zwischenstände. Darf verlorengehen, baut sich neu auf.
|
|
- /volume4/CRITICAL/Docker/Flaro/cache:/cache
|
|
|
|
# Kratzplatz fürs Umrechnen. Am besten auf eine SSD und nicht dorthin,
|
|
# wo die Medien liegen — hier wird viel und kurzlebig geschrieben.
|
|
- /volume1/Transcode:/transcode
|
|
|
|
# Die Medien.
|
|
#
|
|
# **Ohne `:ro`, weil FLARO_WRITE_SIDECARS oben an ist.** Wer das nicht
|
|
# will, setzt die Variable auf `false` und hängt wieder mit `:ro` ein —
|
|
# dann bleiben Bilder und Metadaten nur in Flaros Cache, und der Bestand
|
|
# ist gegen jeden Zugriff des Servers geschützt.
|
|
#
|
|
# Transcode-Zwischenstände kommen hier **nie** her; die liegen auf dem
|
|
# eigenen Volume darüber.
|
|
#
|
|
# Was hier eingehängt wird, ist der Pfad, den du später in der Oberfläche
|
|
# als Bibliothek anlegst — also `/media`, nicht `/volume4/MYFLIX`.
|
|
- /volume4/MYFLIX:/media
|
|
|
|
# Hardware fürs Umrechnen. Intel wie AMD laufen über VAAPI an derselben
|
|
# Stelle. Fehlt die Zeile, rechnet Flaro in Software — langsamer, aber es
|
|
# läuft. Zum blossen Umpacken wird sie ohnehin nicht gebraucht.
|
|
devices:
|
|
- /dev/dri:/dev/dri
|
|
|
|
# Die Gesundheitsprüfung steckt im Image und fragt /health ab — hier
|
|
# braucht es sie nicht noch einmal. Die alte Fassung prüfte `dotnet
|
|
# --info` und sagte damit nur, dass die Laufzeit da ist; das war sie auch,
|
|
# während der Server noch migrierte.
|